php + jqgrid + exporter vers excel
Quelqu'un sait comment exporter les données d'un jqgrid vers excel?
je veux faire un rapport en utilisant ce jqgrid qui je pense est awsome. Mais j'ai besoin de sauvegarder ou d'imprimer ce rapport, en quelque sorte, parce que l'information est d'être conservé. Quelqu'un connaît un moyen??
6 réponses
C'est mon approche, il suffit d'ajouter ce code à votre js/fichier 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){
}
très bonne question, je me grattais la tête à ce sujet aussi. Je l'ai fait en choisissant la suggestion de Félix, laissez-moi le compléter en ajoutant les lignes suivantes à votre corps html.
<form method="post" action="csvExport.php">
<input type="hidden" name="csvBuffer" id="csvBuffer" value="" />
</form>
le seul problème que j'ai est le fichier excel exporté n'inclut pas mes noms de colonne dans jqgrid, aussi y a-t-il un moyen d'exclure une ou plusieurs colonnes lors de l'exportation vers le fichier excel?
merci ~
la fonction!
J'ai fait des changements.
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)); } }); }
j'ai résolu votre problème .et maintenant je suis capable d'exporter des données excel avec des noms de colonne s'il vous plaît se référer à mon code.
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();
}
s'il vous Plaît laissez-moi savoir si vous rencontrez le moindre problème.
Voici une solution intelligente pour sauver le jqGrid
données en format excel sans appeler le php
script: (vous avez juste besoin d'appeler cette fonction avec GridID
et un 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();
}
nous créons d'abord un CSV
chaîne délimitée par ;
. Puis un anchor
la balise est créée avec certains attributs. Enfin click
appelée a
pour télécharger le fichier.
vous pouvez regarder plusieurs types de MIME excel : type MIME Liste
créer un formulaire et un élément masqué avec le nom "csvBuffer". Cet élément est défini par la fonction. J'ai dû changer la ligne
html = html+"\n"
html = html+"\n"
pour échapper correctement.