Экспорт из jqGrid в Excel
Вариантов на текущий момент два: использовать серверную часть проекта jqgrid-php, и перелопачивать таким образом свой код или написать обработчик на JavaScript который будет формировать файл формата csv. Я предпочел второй вариант. Однако столкнулся с «подводным» камнем. А именно, сайт у меня в кодировке utf8, а виндовый офис (с OpenOffice и LibreOffice проблем нет) по умолчанию думает что всё что csv, то в формате windows-1251, и нет даже диалога выбора кодировки. Потому для устранения сей пришлось пойти на некоторую хитрость — формирую не файл не с расширением csv, а с расширением txt, с разделителем колонок — табуляция. А далее уже в Excel загружаю его через: Данные — Получение внешних данных — Из текста.
Код PHP:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
<?php // Данный код создан и распространяется по лицензии GPL v3 // Изначальный автор данного кода - Грибов Павел // http://грибовы.рф ?> <div class="row-fluid"> <div class="span12"> <div class="well form-inline"> <select name="tmc_groups" id="tmc_groups"> </select> <button type="submit" class="btn" id="viewwork" name="viewwork">Построить отчет</button> </div> <table id="tbl_rep"></table> <div id="pg_nav"></div> <div id="pg_add_edit"></div> </div> </div> <form method="post" action="inc/csvExport.php"> <input type="hidden" name="csvBuffer" id="csvBuffer" value="" /> </form> <script type="text/javascript" src="controller/client/js/operreports/operreports.js"></script> |
Код JavaScript:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 |
function exportExcel(list) { var mya=new Array(); mya=$(list).getDataIDs(); var data=$(list).getRowData(mya[0]); var colNames=new Array(); var ii=0; for (var i in data){colNames[ii++]=i;} var html=""; for(i=0;i<mya.length;i++) { data=$(list).getRowData(mya[i]); for(j=0;j<colNames.length;j++) { html=html+data[colNames[j]]+"\t"; } html=html+"\n"; } html=html+"\n"; document.forms[0].csvBuffer.value=html; document.forms[0].method='POST'; document.forms[0].action='inc/csvExport.php'; document.forms[0].target='_blank'; document.forms[0].submit(); }; function ViewReports(list,pager){ jQuery(list).jqGrid({ url:'controller/server/operreports/viewremains.php?nome_group='+$("#tmc_groups").val(), datatype: "json", colNames:['Id','Склад','Номенклатура','Серия','Количество','Цена закупки','Контрагент'], colModel:[ {name:'id',index:'id', width:20}, {name:'sklad',index:'plname', width:155,summaryType:'count', summaryTpl : '({0}) Всего:'}, {name:'namenome',index:'namenome', width:100}, {name:'seria',index:'grname', width:100}, {name:'ost',index:'invnum', width:50,sorttype:'number',formatter:'number', summaryType:'sum'}, {name:'cost',index:'cost', width:100}, {name:'knt',index:'knt', width:100} ], grouping: true, groupingView : { groupField : ['sklad', 'namenome'], groupText : ['<b>{0}</b>'], groupCollapse : true, groupSummary : true, }, rowNum: 1000, height: 'auto', autowidth: true, shrinkToFit: true, pager: pager, sortname: 'namenome', viewrecords: true, rowNum:1000, scroll:1, sortorder: "asc", caption:"Остатки комплектующих" }); jQuery(list).jqGrid('navGrid',pager,{edit:false,add:false,del:false,search:false}); jQuery(list).jqGrid('navButtonAdd',pager,{caption:"<img src='controller/client/themes/"+theme+"/ico/disk.png'>", title: "Экспорт в Excel", onClickButton:function(){ exportExcel(list); } }); }; $("#tmc_groups").load("controller/server/operreports/get_tmc_group.php",function(){ ViewReports("#tbl_rep","#pg_nav"); }); $("#viewwork").click(function(){ if ($("#tmc_groups").val()!="") { jQuery("#tbl_rep").GridUnload("#tbl_rep"); ViewReports("#tbl_rep","#pg_nav"); } else alert("Не выбрана категория ТМЦ!"); return false; }); |
Код csvexport.php:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
<?php // Данный код создан и распространяется по лицензии GPL v3 // Изначальный автор данного кода - Грибов Павел // http://грибовы.рф header('Content-type: application/vnd.ms-excel'); header("Content-Disposition: attachment; filename=file.txt"); header("Pragma: no-cache"); $buffer = $_POST['csvBuffer']; try{ echo $buffer; }catch(Exception $e){ } ?> |
UPDATE: Экспорт из jqGrid в Excel часть 2