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 + "