Кто-нибудь знает способ экспортировать данные из 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