php + jqgrid + экспорт в excel
Кто-нибудь знает способ экспортировать данные из jqgrid, чтобы преуспеть?
Я хочу сделать отчет, используя этот jqgrid, который я считаю удивительным. Но мне нужно как-то сохранить или распечатать этот отчет, потому что информация должна храниться. Кто-нибудь знает как-нибудь??
6 ответов
Это мой подход, просто добавьте этот код в ваш файл js/html
$("#list").jqGrid('navGrid', '#pager',{view:true, del:false, add:false, edit:false, excel:true})
.navButtonAdd('#pager',{
caption:"Export to Excel",
buttonicon:"ui-icon-save",
onClickButton: function(){
exportExcel();
},
position:"last"
});
function exportExcel()
{
var mya=new Array();
mya=$("#list").getDataIDs(); // Get All IDs
var data=$("#list").getRowData(mya[0]); // Get First row to get the labels
var colNames=new Array();
var ii=0;
for (var i in data){colNames[ii++]=i;} // capture col names
var html="";
for(i=0;i<mya.length;i++)
{
data=$("#list").getRowData(mya[i]); // get each row
for(j=0;j<colNames.length;j++)
{
html=html+data[colNames[j]]+"\t"; // output each column as tab delimited
}
html=html+"\n"; // output each row with end of line
}
html=html+"\n"; // end of line at the end
document.forms[0].csvBuffer.value=html;
document.forms[0].method='POST';
document.forms[0].action='csvExport.php'; // send it to server which will open this contents in excel file
document.forms[0].target='_blank';
document.forms[0].submit();
}
PHP скрипт
header('Content-type: application/vnd.ms-excel');
header("Content-Disposition: attachment; filename=file.xls");
header("Pragma: no-cache");
$buffer = $_POST['csvBuffer'];
try{
echo $buffer;
}catch(Exception $e){
}
Очень хороший вопрос, я тоже почесал голову об этом. Я сделал это, выбрав предложение Феликса, позвольте мне завершить его, добавив следующие строки в ваше HTML-тело.
<form method="post" action="csvExport.php">
<input type="hidden" name="csvBuffer" id="csvBuffer" value="" />
</form>
Единственная проблема, с которой я столкнулся, это то, что экспортированный файл Excel не включает имена моих столбцов в jqgrid, также есть ли способ исключить определенный или несколько столбцов при экспорте в файл Excel?
спасибо ~
Вот умное решение, чтобы сохранить jqGrid
данные в виде таблицы Excel без вызова php
скрипт: (вам просто нужно вызвать эту функцию с GridID
и необязательный Filename
)
var createExcelFromGrid = function(gridID,filename) {
var grid = $('#' + gridID);
var rowIDList = grid.getDataIDs();
var row = grid.getRowData(rowIDList[0]);
var colNames = [];
var i = 0;
for(var cName in row) {
colNames[i++] = cName; // Capture Column Names
}
var html = "";
for(var j=0;j<rowIDList.length;j++) {
row = grid.getRowData(rowIDList[j]); // Get Each Row
for(var i = 0 ; i<colNames.length ; i++ ) {
html += row[colNames[i]] + ';'; // Create a CSV delimited with ;
}
html += '\n';
}
html += '\n';
var a = document.createElement('a');
a.id = 'ExcelDL';
a.href = 'data:application/vnd.ms-excel,' + html;
a.download = filename ? filename + ".xls" : 'DataList.xls';
document.body.appendChild(a);
a.click(); // Downloads the excel document
document.getElementById('ExcelDL').remove();
}
Сначала мы создаем CSV
строка с разделителями ;
, Тогда anchor
тег создается с определенными атрибутами. в заключение click
называется на a
скачать файл.
Вы можете взглянуть на несколько превосходных типов MIME: MIME Type List
Отличная функция!
Я внес изменения.
функция exportExcel($id){ var keys=[], ii=0, row =""; var ids=$id.getDataIDs(); // Получить все идентификаторы var row=$id.getRowData(ids[0]); // Получить первую строку, чтобы получить метки for (var k в строке) { Клавиши [II ++]= к; // захватить имена столбцов Строки = строки + к +"\ т"; // выводим каждый столбец как разделитель табуляции } Строки = строки +"\ п"; // Выходной заголовок с концом строки для (i = 0; i"; form = form + ""; form = form + " form>