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??

19
demandé sur Justin Ethier 2010-02-03 03:11:20

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

}
11
répondu Felix 2010-08-26 09:33:16

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 ~

3
répondu Patrick 2010-11-18 07:57:17

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));
    }
  });
}
2
répondu wagner 2011-06-25 16:32:31

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.

1
répondu Vijay 2011-01-20 07:08:26

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

1
répondu Suhail Gupta 2015-11-16 10:46:56

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.

0
répondu Antonia 2010-11-03 21:18:23