2011-07-19 12 views
6

Mam jqGrid gdzie otrzymuję dane naraz z serwera (java) w formacie JSON. Chcę, aby dane w jqGrid były eksportowane do formatu Excel.eksport do programu Excel w jquery lub jqGrid

Do tej pory widziałem to page co daje mi błąd w IE 'o.url is null or not an object' grid.import.js

Również widziałem this demo gdzie na podpowiedzi przycisku eksportu mówi Export To Excel ale plik zapisany jest w formacie xml.

Chciałbym więc wszelkie sugestie, które mogą przekształcić mój ciąg JSON w excel za pomocą javascript lub jquery plugin lub przy użyciu wbudowanej funkcji jqgrid.

My jqGrid Kod

enter image description here

My 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(); 
        } 
       }); 

Część mojego 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

Spójrz [tutaj] (http://stackoverflow.com/questions/6580261/how -to-get-all-ids-of-jqgrid-include-the-paginated-ones/6581791 # 6581791) i [tutaj] (http://stackoverflow.com/questions/5724342/jqgrid-export-to-csv- post-rather-than-get/5759889 # 5759889) na przykład. – Oleg

Odpowiedz

6

Nie trzeba wyeksportować plik w formacie Excel w aby uzyskać dane do Excela. Generalnie dużo łatwiej jest eksportować do CSV. Pliki CSV powinny być domyślnie skojarzone z programem Excel, więc powinna zawierać ikonę programu Excel i wszystko. XML działa tak samo, jak sądzę, ale format CSV jest znacznie lżejszy i wykonuje tę samą pracę w tym przypadku. Konwersja JSON do CSV jest prosta:

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

Co dzieje się po tym, jak mam 'csv' jak umieścić go w pliku? – abi1964

+0

Nie można tego zrobić od klienta. Aby to zrobić, musisz wykonać skrypt po stronie serwera. Czego używasz na serwerze? – benekastah

+0

Używam java i rozpórki 2 – abi1964

-2

pracuję z MOSS 2007 eksportować kilka list (powiedzmy 5 listy) do wymogu excel.My to muszę więcej niż jeden list do wywozu do excel.I mają dodał CEWP na mojej stronie za pomocą przycisku, dzięki czemu jednym kliknięciem mogę eksportować więcej niż jedną listę danych do excel.nw pojawia się błąd czasu wykonywania, gdy używam jquery , jeśli ($ ("# WebPartWPQ3") jest (' : visible ')) ---> oczekiwany błąd obiektu. Nie znajduję żadnego identyfikatora div do śledzenia .. tak jest nikomu znać odpowiedź, pls być z tego wyjdzie .. ans związanych z tym problemem jest naprawdę bardzo doceniany .. mój kod jest następujący.

<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

Czy możesz wstawić wcięcie swojego kodu? – Bellash

Powiązane problemy