Intereting Posts
Обработка файлов PHP с помощью специальных символов UTF-8 Как реализовать «Режим обслуживания» на уже созданном веб-сайте php + unixODBC + DB2 + DESCRIBE = токен недействителен? PHP 7 FTP-расширение не загружается в Windows 7 Установка плагина Eclipse PDT MySQL: обновление всех строк, задающих поле, до 0, но установка поля одной строки в 1 Как передать ввод формы на страницу WordPress? Как проверить, находится ли геокод близко или по пути, определенному в KML LineString с PHP или MySQL access_token – Скрипт для загрузки фотографии в альбомную страницу Как добавить пути к переменной Apache PATH? JQuery .val () не возвращает прерывания строки в текстовом поле Можете ли вы определить или изменить константу в PHP? Обратная косая черта в PHP – что это значит? date () возвращает неправильный день, хотя временная метка верна! MySQLi: как вставить в несколько таблиц с подготовленными операторами

php + jqgrid + экспорт в excel

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