Кто-нибудь знает способ экспортировать данные из jqgrid в excel?
Я хочу сделать отчет, используя этот jqgrid, который, как мне кажется, является awsome. Но мне нужно как-то сохранить или распечатать этот отчет, потому что информация должна храниться. Кто-нибудь знает какой-то способ?
Это мой подход, просто добавьте этот код в свой файл 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?
спасибо ~
Отличная функция!
Я внес изменения.
function exportExcel ($ id) { var keys = [], ii = 0, rows = ""; var ids = $ id.getDataIDs (); // Получить все идентификаторы var row = $ id.getRowData (ids [0]); // Получить первую строку для получения меток для (var k в строке) { Клавиши [II ++] = к; // захватить имена col Строки = строки + к + "\ т"; // выводим каждый столбец как разделитель табуляции } Строки = строки + "\ п"; // Выходной заголовок с концом строки для (i = 0; i <ids.length; i ++) { строка = $ id.getRowData (идентификаторы [I]); // получаем каждую строку for (j = 0; j <keys.length; j ++) rows = rows + row [keys [j]] + "\ t"; // выводить каждый Row как разделитель табуляции Строки = строки + "\ п"; // выводим каждую строку с концом строки } Строки = строки + "\ п"; // конец строки в конце var form = "<form name = 'csvexportform' action = '" + php_path + "csvexport.php' method = 'post'>"; form = form + "<input type = 'hidden' name = 'csvBuffer' value = '" + rows + "'>"; form = form + "</ form> <script> document.csvexportform.submit (); </ sc" + "ript>"; OpenWindow = window.open ('', ''); OpenWindow.document.write (форма); OpenWindow.document.close (); } функция gridcsvexport (id) { $ ( '#' + Идентификатор) .jqGrid ( 'navButtonAdd', '#' + идентификатор + '_ пейджера', { Подпись: '', название: «экспорт», buttonicon: 'щ-икона-newwin', положение: «последний», onClickButton: function () { exportExcel ($ (это)); } }); }
Я решил вашу проблему. Теперь я могу экспортировать данные excel с именами столбцов, пожалуйста, обратитесь к моему коду.
function exportExcel() { var mya=new Array(); mya=$("#tblnoupdate").getDataIDs(); // Get All IDs var data=$("#tblnoupdate").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(k=0;k<colNames.length;k++) { html=html+colNames[k]+"\t"; // output each Column as tab delimited } html=html+"\n"; // Output header with end of line for(i=0;i<mya.length;i++) { data=$("#tblnoupdate").getRowData(mya[i]); // get each row for(j=0;j<colNames.length;j++) { html=html+data[colNames[j]]+"\t"; // output each Row 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='<?php echo $baseurl;?>csvexport.php'; // send it to server which will open this contents in excel file document.forms[0].target='_blank'; document.forms[0].submit(); }
Пожалуйста, дайте мне знать, если у вас возникнут какие-либо проблемы.
Вот умное решение для сохранения данных 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
с определенными атрибутами. Наконец, вызывается для загрузки файла.
Вы можете взглянуть на несколько типов Excel MIME: Список типов MIME
создайте форму и скрытый элемент с именем «csvBuffer». Этот элемент устанавливается функцией. Мне пришлось менять линию
html = html+"\n"
в
html = html+"\\n"
чтобы избежать этого.
см. эту ссылку, в которой показано, как экспортировать jqgrid в Excel-лист: http://www.trirand.com/blog/phpjqgrid/examples/export/excel/default.php