Quelqu'un sait comment exporter les données d'un jqgrid pour exceller?
Je veux faire un rapport en utilisant ce jqgrid que je pense est génial. Mais j’ai besoin de sauvegarder ou d’imprimer ce rapport d’une façon ou d’une autre, car faut-il conserver les informations. Quelqu'un sait comment faire ??
Ceci est mon approche, ajoutez simplement ce code à votre fichier 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){
}
très bonne question, je me suis égratigné la tête à ce sujet également. Je l'ai choisi en choisissant la suggestion de Felix, laissez-moi la 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, existe-t-il également un moyen d'exclure une ou plusieurs colonnes lors de l'exportation vers un fichier Excel?
merci ~
Super fonction!
J'ai apporté des modifications.
function exportExcel ($ id) { var clés = [], ii = 0, rows = ""; var ids = $ id.getDataIDs (); // Obtenir tous les identifiants Var row = $ id.getRowData (ids [0]); // Obtenir la première ligne pour obtenir les étiquettes Pour (var k dans la ligne) { Clés [ii ++] = k; // capture les noms de col rows = rows + k + "\ t"; // affiche chaque colonne en tant que délimité par des tabulations } rows = rows + "\ n"; // En-tête de sortie avec fin de ligne Pour (i = 0; i <ids.length; i ++) { Row = $ id.getRowData (ids [i]); // récupère chaque ligne pour (j = 0; j <keys.length; j ++) lignes = lignes + ligne [clés [j]] + "\ t"; // affiche chaque ligne en tant que délimité par des tabulations rows = rows + "\ n"; // affiche chaque ligne avec la fin de ligne } rows = rows + "\ n"; // fin de ligne à la fin var form = "<nom du formulaire = 'csvexportform' action = '" + php_path + "csvexport.php' method = 'post'>"; form = form + "<type d'entrée = 'hidden' name = 'csvBuffer' valeur = '" + lignes + "'>"; 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 ', { libellé:' ', titre:' export ', icone du bouton:' ui-icon-newwin ', position : 'last', onClickButton: function () { exportExcel ($ (this)); } ) [ }
Voici une solution intelligente pour enregistrer les données jqGrid
sous forme de feuille Excel sans appeler le script php
: (Vous devez simplement appeler cette fonction avec GridID
et une option 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 une chaîne CSV
délimitée par ;
. Ensuite, une balise anchor
est créée avec certains attributs. Finalement, click
est appelé sur a
pour télécharger le fichier.
Vous pouvez consulter plusieurs types Excel MIME: Liste des types MIME
J'ai résolu votre problème. Et maintenant, je suis capable d'exporter des données Excel avec des noms de colonnes, veuillez vous 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 un problème.
créez un formulaire et un élément masqué avec le nom "csvBuffer". Cet élément est défini par la fonction. Je devais changer de ligne
html = html+"\n"
à
html = html+"\\n"
afin d'y échapper correctement.