2010-02-03 42 views
19

Ai đó biết cách xuất dữ liệu từ jqgrid sang excel?php + jqgrid + xuất sang excel

Tôi muốn thực hiện báo cáo bằng cách sử dụng jqgrid mà tôi nghĩ là awsome. Nhưng tôi cần phải lưu hoặc in báo cáo này bằng cách nào đó, bởi vì thông tin được giữ lại. Ai đó biết cách nào ??

Trả lời

11

Đây là cách tiếp cận của tôi, chỉ cần thêm mã này vào file js/html của bạn

$("#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 script

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

Cảm ơn bạn đã chia sẻ mã của bạn Felix Guerrero. Tôi có một vấn đề: khi tôi chạy mã của bạn tôi nhận được lỗi này: document.forms [0] .csvBuffer là không xác định, bạn có thể giúp tôi sửa lỗi này? –

+0

Mã này dường như chỉ xem xét các hàng hiển thị, bạn có gợi ý nào về cách lấy danh sách đầy đủ (tức là không chỉ các hàng trong trang hiện tại) không? – Don

+0

Việc này có lấy dữ liệu từ đầu sau không? Tôi cho là không .. –

0

tạo ra một hình thức và một yếu tố ẩn với cái tên "csvBuffer". Phần tử này được thiết lập bởi hàm. tôi đã phải thay đổi dòng

html = html+"\n" 

để

html = html+"\\n" 

để thoát khỏi nó đúng cách.

3

câu hỏi rất hay, tôi cũng đã gãi đầu về điều này. Tôi đã thực hiện nó bằng cách chọn đề xuất của Felix, hãy để tôi hoàn thành nó bằng cách thêm các dòng sau vào cơ thể html của bạn.

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

Vấn đề duy nhất tôi có là tệp excel được xuất không bao gồm tên cột trong jqgrid, cũng có cách để loại trừ một hoặc nhiều cột khi xuất sang tệp excel không?

cảm ơn bạn ~

1

Tôi đã giải quyết được vấn đề của bạn. Và bây giờ tôi có thể xuất dữ liệu có tên cột, vui lòng tham khảo mã của tôi.

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

Vui lòng cho tôi biết nếu bạn gặp phải bất kỳ sự cố nào.

2

Chức năng tuyệt vời!
Tôi đã thực hiện thay đổi.

 
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

Dưới đây là một giải pháp thông minh để lưu dữ liệu jqGrid như excel mà không gọi kịch bản php: (Bạn chỉ cần gọi hàm này với GridID và một tùy chọn 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(); 
} 

đầu tiên chúng ta tạo một chuỗi CSV phân định với ;. Sau đó, một thẻ anchor được tạo với một số thuộc tính nhất định. Cuối cùng, click được gọi là a để tải xuống tệp.

Bạn có thể xem một số loại MIME nổi bật: MIME Type List