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.