Alguien sabe una manera de exportar los datos de un jqgrid a excel?

Quiero hacer un informe utilizando este jqgrid que creo que es impresionante. Pero necesito guardar o imprimir este informe, de alguna manera, porque es información para ser keeped.
Alguien sabe alguna manera??

InformationsquelleAutor Paulo | 2010-02-03

6 Comentarios

  1. 11

    Este es mi enfoque, sólo tiene que añadir este código a tu js/html archivo

    $("#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){
    
    }
    • Gracias por compartir tu código Félix Guerrero. Tengo un problema: cuando ejecuto el código me sale este error: documento.forms[0].csvBuffer es indefinido, me puedes ayudar a solucionar este problema?
    • Este código no parece considerar sólo las filas visibles, ¿tiene usted alguna sugerencia sobre cómo obtener la lista completa (es decir, no sólo las filas en la página actual)?
  2. 3

    muy buena pregunta, yo estaba rascándome la cabeza acerca de esto también.
    Lo hice por la elección de Félix sugerencia, me deja completar añadiendo las siguientes líneas a su
    html cuerpo.

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

    El único problema que tengo es el archivo de excel exportado no incluyen a mi los nombres de columna en jqgrid, también hay una forma de excluir a un particular o de varias columnas al exportar a un archivo de excel?

    gracias ~

  3. 2

    De la gran función!

    He hecho cambios.

    función exportExcel($id){ 
    var claves=[], ii=0, rows=""; 
    var id=$id.getDataIDs(); //Obtiene Todos los IDs 
    var fila=$id.getRowData(id[0]); //Obtener la Primera fila para conseguir las etiquetas 
    for (var k en la fila) { 
    las teclas[i++]=k; //captura col nombres 
    filas=filas+k+"\t"; //salida de cada Columna como texto delimitado por tabuladores 
    } 
    filas=filas+"\n"; //Salida de cabecera con el final de la línea 
    for(i=0;i<id.longitud;i++) { 
    fila=$id.getRowData(ids[i]); //obtiene cada fila 
    para(j=0;j<llaves.length;j++) filas=filas+fila[teclas de[j]]+"\t"; //salida de cada Fila como texto delimitado por tabuladores 
    filas=filas+"\n"; //salida de cada fila con el final de la línea 
    } 
    filas=filas+"\n"; //fin de línea al final 
    var formulario = "<form name='csvexportform' action='"+php_path+"csvexport.php' method='post'>"; 
    formulario de = forma + "<input type='hidden' name='csvBuffer' value='"+filas+"'>"; 
    formulario de = forma + "</form><script>el documento.csvexportform.submit();</sc"+"ript>"; 
    OpenWindow=ventana.open(", "); 
    OpenWindow.documento.escribir ("forma"); 
    OpenWindow.documento.close(); 
    } 
    
    función gridcsvexport(id) { 
    $('#'+id).jqGrid('navButtonAdd','#'+id+'_pager',{ 
    título:", 
    título:'exportar', 
    buttonicon:'ui-icon-newwin', 
    posición:'último', 
    onClickButton:function (){ 
    exportExcel($(this)); 
    } 
    }); 
    } 
    
  4. 1

    He resuelto su problema .y ahora iam capaz de exportar datos de excel con los nombres de columna por favor 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, hágamelo saber si se enfrentan a cualquier problema.

  5. 1

    Aquí es una solución inteligente para guardar la jqGrid de datos como una hoja de excel sin llamar a la php script: (sólo necesita llamar a esta función con GridID y una opcional 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();
    }

    Primero debemos crear una CSV cadena delimitada con ;. A continuación, una anchor etiqueta se crea con ciertos atributos. Finalmente click se llama en a para descargar el archivo.

    Usted puede tener una mirada en varios excel Tipos MIME : Tipo de MIME Lista

  6. 0

    crear un formulario y un elemento oculto con el nombre «csvBuffer». Este elemento se establece por la función.
    He tenido que cambiar la línea de

    html = html+"\n"

    a

    html = html+"\\n"

    con el fin de escapar de ella correctamente.

Dejar respuesta

Please enter your comment!
Please enter your name here