2010-02-03 11 views
19

पर निर्यात करने के लिए कोई व्यक्ति jqgrid से डेटा को एक्सेल करने के लिए डेटा निर्यात करने का तरीका जानता है?php + jqgrid + एक्सेल

मैं इस jqgrid का उपयोग करके एक रिपोर्ट करना चाहता हूं जो मुझे लगता है कि यह अजीब है। लेकिन मुझे किसी भी तरह से इस रिपोर्ट को सहेजने या मुद्रित करने की आवश्यकता है, क्योंकि जानकारी रखने के लिए है। कोई भी किसी भी तरह से जानता है ??

उत्तर

11

यह, मेरे दृष्टिकोण है सिर्फ एक रूप और नाम "csvBuffer" के साथ एक छिपा तत्व बनाने के अपने 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(); 
     } 

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

} 
+1

शेयर अपने कोड फेलिक्स ग्युरेरो के लिए धन्यवाद:

आप कई एक्सेल माइम प्रकार पर एक नज़र हो सकता था। मुझे एक समस्या है: जब मैं आपका कोड चलाता हूं तो मुझे यह त्रुटि मिलती है: document.forms [0] .csvBuffer अपरिभाषित है, क्या आप इसे ठीक करने में मेरी सहायता कर सकते हैं? –

+0

यह कोड केवल दृश्यमान पंक्तियों पर विचार करने के लिए प्रतीत होता है, क्या आपको पूर्ण सूची प्राप्त करने के बारे में कोई संकेत है (यानी वर्तमान पृष्ठ में केवल पंक्तियां नहीं)? – Don

+0

क्या यह बैक एंड से डेटा लाता है? मुझे नहीं लगता.. –

0

लिए इस कोड को जोड़ें। यह तत्व फ़ंक्शन द्वारा सेट हो जाता है। मैं इसे ठीक से बचने के लिए में

html = html+"\\n" 

करने के लिए लाइन

html = html+"\n" 

बदलना पड़ा।

3

बहुत अच्छा सवाल, मैं इसके बारे में भी अपने सिर को खरोंच कर रहा था। मैंने फ़ेलिक्स के सुझाव को चुनकर इसे बनाया है, मुझे अपने HTML बॉडी में निम्न पंक्तियां जोड़कर इसे पूरा करने दें।

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

समस्या सिर्फ मेरे पास है, एक्सेल jqgrid में मेरे कॉलम नाम शामिल नहीं करता है निर्यात की गई फ़ाइल है भी वहाँ जब फ़ाइल उत्कृष्टता प्राप्त करने के निर्यात के लिए एक विशेष या कई स्तंभों को बाहर करने के लिए एक रास्ता है?

धन्यवाद ~

1

मैं अब अपनी समस्या हल हो .और iam स्तंभ नाम के साथ निर्यात करने के लिए डेटा उत्कृष्टता कृपया मेरी कोड का उल्लेख सक्षम।

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

अगर आपको कोई समस्या आती है तो कृपया मुझे बताएं।

2

ग्रेट फ़ंक्शन!
मैंने बदलाव किए हैं।

 
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)); 
    } 
    }); 
} 
1

यहाँ php स्क्रिप्ट बुला बिना एक्सेल शीट के रूप में jqGrid डेटा को बचाने के लिए एक चतुर समाधान है: (तुम बस करने की जरूरत है GridID और एक वैकल्पिक 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(); 
} 

हम पहले एक CSV स्ट्रिंगसाथ सीमांकित बनाने। फिर anchor टैग कुछ विशेषताओं के साथ बनाया गया है। अंत में click को फ़ाइल डाउनलोड करने के लिए a पर कॉल किया गया है। MIME Type List