2011-07-19 31 views
6

Tengo un jqGrid donde obtengo datos a la vez del servidor (Java) en formato JSON. Quiero que los datos en el jqGrid se exporten a formato Excel.exportar a Excel en jquery o jqGrid

Hasta ahora vi este page que me da un error en el IE 'o.url is null or not an object' grid.import.js

También vi this demo donde en la punta de la herramienta de botón de exportación que dice Export To Excel pero el archivo guardado está en formato XML.

Así que me gustaría cualquier sugerencia que pueda transformar mi cadena JSON en Excel utilizando javascript o el plugin jquery o utilizando la función incorporada de jqgrid.

Mi jqGrid Código

enter image description here

Mi jqGrid

grid = jQuery("#list2"); 
       grid.jqGrid({ 
        datastr : comparePatchData, 
        datatype: 'jsonstring', 
        colNames:['Name',starheader, header1, header2], 
        colModel:[ 
         {name:'elementName',index:'elementName', width:90}, 
         {name:'isPrasentinXml1',index:'isPrasentinXml1', width:100, align:'center', formatter: patchPresent}, 
         {name:'isPrasentinXml2',index:'isPrasentinXml2', width:100, align:'center', formatter: patchPresent}, 
         {name:'isPrasentinXml3',index:'isPrasentinXml3', width:100, align:'center', formatter: patchPresent} 
        ], 
        pager : '#gridpager2', 
        rowNum:12, 
        scrollOffset:0, 
        height: 320, 
        autowidth:true, 
        viewrecords: true, 
        gridview: true, 
        loadonce:true, 
        jsonReader: { 
         repeatitems: false, 
         page: function() { return 1; }, 
         root: "response" 
        }, 
        subGrid: true, 
        // define the icons in subgrid 
        subGridOptions: { 
         "plusicon" : "ui-icon-triangle-1-e", 
         "minusicon" : "ui-icon-triangle-1-s", 
         "openicon" : "ui-icon-arrowreturn-1-e", 
         //expand all rows on load 
         "expandOnLoad" : false 
        }, 

        subGridRowExpanded: function(subgrid_id, row_id) { 
         //console.info(subgrid_id+", "+row_id); 
         var subgrid_table_id, pager_id, iData = -1; 
         subgrid_table_id = subgrid_id+"_t"; 
         //pager_id = "p_"+subgrid_table_id; 
         $("#"+subgrid_id).html("<table id='"+subgrid_table_id+"' style='overflow-y:auto' class='scroll'></table><div id='"+pager_id+"' class='scroll'></div>"); 

         $.each(comparePatchData.response,function(i,item){ 
          if(item.id === row_id) { 
           iData = i; 
           return false; 
          } 

         }); 
         if (iData == -1) { 
          return; // no data for the subgrid 
         } 

         jQuery("#"+subgrid_table_id).jqGrid({ 
          datastr : comparePatchData.response[iData], 
          datatype: 'jsonstring', 
          colNames: ['Name','Value1','Value2','Value3'], 
          colModel: [ 
           {name:"name",index:"name",width:90}, 
           {name:"firstValue",index:"firstValue",width:100}, 
           {name:"secondValue",index:"secondValue",width:100}, 
           {name:"thirdValue",index:"thirdValue",width:100} 
          ], 
          rowNum:10, 
          //pager: pager_id, 
          sortname: 'name', 
          sortorder: "asc", 
          height: 'auto', 
          autowidth:true, 
          jsonReader: { 
           repeatitems: false, 
           //page: function() { return 1; }, 
           root: "attribute" 
          } 
         }); 

         jQuery("#"+subgrid_table_id).jqGrid('navGrid',{edit:false,add:false,del:false}); 
        } 
       }); 
       grid.jqGrid('navGrid','#gridpager2',{add:false,edit:false,del:false}); 
       grid.jqGrid('navButtonAdd','#gridpager2',{ 
        caption:"Export to Excel", 
        onClickButton : function() { 
         jQuery("#list2").excelExport(); 
        } 
       }); 

Parte de mi JSON

{ 
"response": [ 
    { 
     "id": "1", 
     "elementName": "libgtop2-devel-2.14.4-3.el5", 
     "subCategory": "patch", 
     "isEqual": false, 
     "isPrasentinXml1": false, 
     "isPrasentinXml2": false, 
     "isPrasentinXml3": true, 
     "attribute": [ 
      { 
       "name": "name", 
       "thirdValue": "libgtop2-devel-2.14.4-3.el5" 
      } 
     ] 
    }, 
    { 
     "id": "2", 
     "elementName": "ifd-egate-0.05-15", 
     "subCategory": "patch", 
     "isEqual": false, 
     "isPrasentinXml1": false, 
     "isPrasentinXml2": false, 
     "isPrasentinXml3": true, 
     "attribute": [ 
      { 
       "name": "name", 
       "thirdValue": "ifd-egate-0.05-15" 
      } 
     ] 
    }, 
    { 
     "id": "3", 
     "elementName": "libXScrnSaver-devel-1.1.0-3.1", 
     "subCategory": "patch", 
     "isEqual": false, 
     "isPrasentinXml1": false, 
     "isPrasentinXml2": false, 
     "isPrasentinXml3": true, 
     "attribute": [ 
      { 
       "name": "name", 
       "thirdValue": "libXScrnSaver-devel-1.1.0-3.1" 
      } 
     ] 
    }, 
    { 
     "id": "4", 
     "elementName": "kde-i18n-Chinese-Big5-3.5.4-1", 
     "subCategory": "patch", 
     "isEqual": false, 
     "isPrasentinXml1": true, 
     "isPrasentinXml2": true, 
     "isPrasentinXml3": true, 
     "attribute": [ 
      { 
       "name": "name", 
       "firstValue": "kde-i18n-Chinese-Big5-3.5.4-1", 
       "secondValue": "kde-i18n-Chinese-Big5-3.5.4-1" 
      } 
     ] 
    }, 
    { 
     "id": "5", 
     "elementName": "cpio-2.6-20", 
     "subCategory": "patch", 
     "isEqual": false, 
     "isPrasentinXml1": true, 
     "isPrasentinXml2": true, 
     "isPrasentinXml3": true, 
     "attribute": [ 
      { 
       "name": "name", 
       "firstValue": "cpio-2.6-20", 
       "secondValue": "cpio-2.6-20", 
       "thirdValue": "cpio-2.6-20" 
      } 
     ] 
    }, 
    { 
     "id": "6", 
     "elementName": "grep-2.5.1-54.2.el5", 
     "subCategory": "patch", 
     "isEqual": false, 
     "isPrasentinXml1": true, 
     "isPrasentinXml2": true, 
     "isPrasentinXml3": true, 
     "attribute": [ 
      { 
       "name": "name", 
       "firstValue": "grep-2.5.1-54.2.el5", 
       "secondValue": "grep-2.5.1-54.2.el5", 
       "thirdValue": "grep-2.5.1-54.2.el5" 
      } 
     ] 
    }, 
    { 
     "id": "7", 
     "elementName": "avahi-compat-libdns_sd-0.6.16-1.el5", 
     "subCategory": "patch", 
     "isEqual": false, 
     "isPrasentinXml1": true, 
     "isPrasentinXml2": true, 
     "isPrasentinXml3": true, 
     "attribute": [ 
      { 
       "name": "name", 
       "firstValue": "avahi-compat-libdns_sd-0.6.16-1.el5", 
       "secondValue": "avahi-compat-libdns_sd-0.6.16-1.el5", 
       "thirdValue": "avahi-compat-libdns_sd-0.6.16-1.el5" 
      } 
     ] 
    }, 
    { 
     "id": "8", 
     "elementName": "gpm-devel-1.20.1-74.1", 
     "subCategory": "patch", 
     "isEqual": false, 
     "isPrasentinXml1": true, 
     "isPrasentinXml2": true, 
     "isPrasentinXml3": true, 
     "attribute": [ 
      { 
       "name": "name", 
       "firstValue": "gpm-devel-1.20.1-74.1", 
       "secondValue": "gpm-devel-1.20.1-74.1", 
       "thirdValue": "gpm-devel-1.20.1-74.1" 
      } 
     ] 
    }, 
    { 
     "id": "9", 
     "elementName": "esc-1.0.0-39.el5", 
     "subCategory": "patch", 
     "isEqual": false, 
     "isPrasentinXml1": false, 
     "isPrasentinXml2": false, 
     "isPrasentinXml3": true, 
     "attribute": [ 
      { 
       "name": "name", 
       "thirdValue": "esc-1.0.0-39.el5" 
      } 
     ] 
    }, 
    { 
     "id": "10", 
     "elementName": "kde-i18n-Spanish-3.5.4-1", 
     "subCategory": "patch", 
     "isEqual": false, 
     "isPrasentinXml1": true, 
     "isPrasentinXml2": true, 
     "isPrasentinXml3": true, 
     "attribute": [ 
      { 
       "name": "name", 
       "firstValue": "kde-i18n-Spanish-3.5.4-1", 
       "secondValue": "kde-i18n-Spanish-3.5.4-1" 
      } 
     ] 
    } 
] 
} 
+1

Mira [aquí] (http://stackoverflow.com/questions/6580261/how -to-get-all-ids-of-jqgrid-including-the-paginated-ones/6581791 # 6581791) y [aquí] (http://stackoverflow.com/questions/5724342/jqgrid-export-to-csv- post-rather-get/5759889 # 5759889) por ejemplo. – Oleg

Respuesta

6

Usted no tiene que exportar un archivo usando el formato de Excel en Para obtener los datos en Excel. En general, es mucho más fácil exportar a CSV. Los archivos CSV se deben asociar con Excel de forma predeterminada, por lo que debe tener el ícono de Excel junto con todo. XML funcionaría de la misma manera, creo, pero el formato CSV es mucho más ligero, y hace el mismo trabajo en este caso. JSON convertir a CSV es simple:

var response = JSON.parse(responseJSON).response; 
var csv = arrayToCSV(response); 

function arrayToCSV(arr) { 
    var columnNames = []; 
    var rows = []; 
    for (var i=0, len=arr.length; i<len; i++) { 
     // Each obj represents a row in the table 
     var obj = arr[i]; 
     // row will collect data from obj 
     var row = []; 
     for (var key in obj) { 
      // Don't iterate through prototype stuff 
      if (!obj.hasOwnProperty(key)) continue; 
      // Collect the column names only once 
      if (i === 0) columnNames.push(prepareValueForCSV(key)); 
      // Collect the data 
      row.push(prepareValueForCSV(obj[key])); 
     } 
     // Push each row to the main collection as csv string 
     rows.push(row.join(',')); 
    } 
    // Put the columnNames at the beginning of all the rows 
    rows.unshift(columnNames.join(',')); 
    // Return the csv string 
    return rows.join('\n'); 
} 

// This function allows us to have commas, line breaks, and double 
// quotes in our value without breaking CSV format. 
function prepareValueForCSV(val) { 
    val = '' + val; 
    // Escape quotes to avoid ending the value prematurely. 
    val = val.replace(/"/g, '""'); 
    return '"' + val + '"'; 
} 
+0

¿Qué sucede después de tener 'csv' cómo lo pongo en el archivo? – abi1964

+0

Eso no es posible hacer desde el cliente. Tendría que hacer un script del lado del servidor para hacer eso. ¿Qué estás usando en el servidor? – benekastah

+0

Estoy usando java y struts 2 – abi1964

-2

estoy trabajando con MOSS 2007 para exportar algunas listas (por ejemplo 5 listas) a requerimiento excel.My es i necesita más de una lista a ser exportados a excel.I he Agregué un CEWP en mi página con un botón para que con un clic pueda exportar más de una lista de datos a excel.nw obtengo un error de tiempo de ejecución cuando uso jquery if ($ ('# WebPartWPQ3'). is (' : visible ')) ---> objeto esperado error. No encuentro ningún identificador de div que rastrear ... así es que alguien sabe la respuesta, por favor salga de ello ... ans relacionado con este tema es realmente muy apreciado ... mi código es el siguiente.

<button type="button" 
onclick=exportToExcel();>Click<br> 
</button><br> 
<script type="text/javascript"><br> 
function exportToExcel() <br> 
{ <br> 
alert('Hi');<br> 
//alert($("#WebPartWPQ3").attr("visibility"));<br> 
if($('#WebPartWPQ3').is(':visible'))<br> 
{ <br> 
contentType = "application/vnd.ms-excel";<br> 
var oExcel = new ActiveXObject("Excel.Application");<br> 
var oBook = oExcel.Workbooks.Add;<br> 
var oSheet = oBook.Worksheets(1);<br> 

var VESSApplications =document.getElementById<br>('ctl00_m_g_e3f5d791_5651_40ca_a03a_1c511c7f2b28_ctl00_ctl00_toolBarTbl');<br> 
    alert(document.getElementById('WebPartWPQ3'));<br> 
var OtherApplications =document.getElementById('tblOtherApplications');<br> 
// var MFGApplications =document.getElementById('tblMFGApplications');<br> 
var row=3;<br> 
var col=1;<br> 

//Define criteria - start<br> 
oSheet.Cells(row, col)="Business Function";<br> 
oSheet.Cells(row, col+1)="VESS";<br> 
oSheet.Cells(row, col+2)=selectedVESSBusinessFunction;<br> 
// oSheet.Cells(row, col+3)="Manufacturing";<br> 
// if(selectedMFGBusinessFunction != "-Select-")<br> 
// oSheet.Cells(row, col+4)=selectedMFGBusinessFunction;<br> 
row +=2;<br> 

oSheet.Cells(row, col)="Operating System";<br> 
oSheet.Cells(row, col+1)="First Choice";<br> 
    if(selectedOperatingSystemFirstChoice != "-Select-")<br> 

oSheet.Cells(row, col+2)=selectedOperatingSystemFirstChoice;<br> 


oSheet.Cells(row, col+3)="Second Choice";<br> 

if(selectedOperatingSystemSecondChoice != "-Select-")<br> 

oSheet.Cells(row, col+4)=selectedOperatingSystemSecondChoice;<br> 

row +=2;<br> 
oSheet.Cells(row, col)="Platform";<br> 
oSheet.Cells(row, col+1)="First Choice";<br> 
oSheet.Cells(row, col+2)=selectedPlatformFirstChoice;<br> 
oSheet.Cells(row, col+3)="Second Choice";<br> 

if(selectedPlatformSecondChoice != "-Select-")<br> 

oSheet.Cells(row, col+4)=selectedPlatformSecondChoice;<br> 
row +=2;<br> 
oSheet.Cells(row, col)="Delivery Method";<br> 
oSheet.Cells(row, col+1)="First Choice";<br> 
oSheet.Cells(row, col+2)=selectedDeliveryFirstChoice;<br> 
oSheet.Cells(row, col+3)="Second Choice";<br> 

if(selectedDeliverySecondChoice != "-Select-")<br> 

oSheet.Cells(row, col+4)=selectedDeliverySecondChoice;<br> 
row +=2;<br> 
//alert(VESSApplications.rows.length);<br> 
if(VESSApplications.rows.length>0)<br> 
{<br> 
for (var y = 0; y < VESSApplications.rows.length; y++) <br> 
{<br> 
    for (var x = 0; x < VESSApplications .rows(y).cells.length; x++) <br> 
    {<br> 
    //   oSheet.Cells(y + 1, x + 1) = VESSApplications .rows(y).cells(x).innerText;<br> 
     oSheet.Cells(row, x + 1) = VESSApplications .rows(y).cells(x).innerText;<br> 

    }<br> 
      row++;<br> 

}<br> 
// oExcel.Visible = true;<br> 
    // oExcel.UserControl = true;<br> 
}<br> 

else<br> 
{<br> 
alert("There is no VESS/Other Applications to Export!");<br> 
}<br> 
row +=2;<br> 

//Other Applications<br> 

/*  for (var y = 0; y < OtherApplications.rows.length; y++) <br> 
{<br> 
    for (var x = 0; x < OtherApplications.rows(y).cells.length; x++) <br> 
    {<br> 
     oSheet.Cells(row, x + 1) = OtherApplications.rows(y).cells(x).innerText;<br> 

    }<br> 
      row++;<br> 

}<br> 


    row +=2;<br> 


//MFG Applications<br> 

for (var y = 0; y < MFGApplications.rows.length; y++) <br> 
{<br> 
    for (var x = 0; x < MFGApplications.rows(y).cells.length; x++) <br> 
    {<br> 
    //   oSheet.Cells(y + 1, x + 1) = VESSApplications .rows(y).cells(x).innerText;<br> 
     oSheet.Cells(row, x + 1) = MFGApplications.rows(y).cells(x).innerText;<br> 

    }<br> 
      row++;<br> 

}<br> 

*/ 
oSheet.columns.autofit;<br> 


oExcel.Visible = true;<br> 
oExcel.UserControl = true;<br> 
}<br> 
else<br> 
{<br> 
alert('No VESS/Other applications available to export');<br> 
}<br> 
}<br> 
+0

¿Puedes introducir tu código? – Bellash