php jquery jqgrid jqgrid-php

php+jqgrid+exportar a excel



jquery jqgrid-php (6)

¿Alguien sabe cómo exportar los datos de un jqgrid para sobresalir?

Quiero hacer un informe usando este jqgrid que creo que es impresionante. Pero necesito guardar o imprimir este informe de alguna manera, porque es información que se debe guardar. Alguien sabe de alguna manera ??


Aquí hay una solución inteligente para guardar los datos de jqGrid como una hoja de Excel sin llamar al script php : (Solo necesita llamar a esta función con GridID y un Filename opcional)

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(); }

Primero creamos una cadena CSV delimitada con ; . Luego se crea una etiqueta de anchor con ciertos atributos. Finalmente click se llama a para descargar el archivo.

Podrías echar un vistazo a varios tipos MIME de Excel: Lista de tipos MIME


Este es mi enfoque, solo agregue este código a su archivo 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(); }

Script 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){ }


Gran funcion
He hecho cambios.

function exportExcel($id){ var keys=[], ii=0, rows=""; var ids=$id.getDataIDs(); // Get All IDs var row=$id.getRowData(ids[0]); // Get First row to get the labels for (var k in row) { keys[ii++]=k; // capture col names rows=rows+k+"/t"; // output each Column as tab delimited } rows=rows+"/n"; // Output header with end of line for(i=0;i<ids.length;i++) { row=$id.getRowData(ids[i]); // get each row for(j=0;j<keys.length;j++) rows=rows+row[keys[j]]+"/t"; // output each Row as tab delimited rows=rows+"/n"; // output each row with end of line } rows=rows+"/n"; // end of line at the end 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(form); OpenWindow.document.close(); } function gridcsvexport(id) { $(''#''+id).jqGrid(''navButtonAdd'',''#''+id+''_pager'',{ caption:'''', title:''export'', buttonicon:''ui-icon-newwin'', position:''last'', onClickButton:function (){ exportExcel($(this)); } }); }


Muy buena pregunta, me estaba rascando la cabeza sobre esto también. Lo hice eligiendo la sugerencia de Felix, déjame completarlo agregando las siguientes líneas a tu cuerpo html.

<form method="post" action="csvExport.php"> <input type="hidden" name="csvBuffer" id="csvBuffer" value="" /> </form>

El único problema que tengo es que el archivo de Excel exportado no incluye los nombres de mis columnas en jqgrid, ¿también hay una manera de excluir una columna particular o varias al exportar a un archivo de Excel?

gracias ~


Resolví su problema. Y ahora puedo exportar datos a Excel con nombres de columnas, consulte mi código.

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(); }

Por favor avíseme si tiene algún problema.


cree un formulario y un elemento oculto con el nombre "csvBuffer". Este elemento se establece por la función. Tuve que cambiar la linea

html = html+"/n"

a

html = html+"//n"

con el fin de escapar de ella correctamente.