2012-07-02 74 views
2

我有這個jquery函數的工作,除了我需要添加的東西。我在桌上有一個過濾器設置來隱藏列。當我隱藏列並單擊導出時,無論使用什麼字段,我將如何導出未隱藏的表格列?html表格,使用jquery excel

var write_to_excel = (function() { 
    var uri = 'data:application/vnd.ms-excel;base64,', 
     template = '<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns="http://www.w3.org/TR/REC-html40"><head><!--[if gte mso 9]><xml><x:ExcelWorkbook><x:ExcelWorksheets><x:ExcelWorksheet><x:Name>{worksheet}</x:Name><x:WorksheetOptions><x:DisplayGridlines/></x:WorksheetOptions></x:ExcelWorksheet></x:ExcelWorksheets></x:ExcelWorkbook></xml><![endif]--></head><body><table>{table}</table></body></html>', 
     base64 = function(s) { 
      return window.btoa(unescape(encodeURIComponent(s))) 
     }, 
     format = function(s, c) { 
      return s.replace(/{(\w+)}/g, function(m, p) { 
       return c[p]; 
      }) 
     } 
     return function(table, name) { 
      if (!table.nodeType) table = document.getElementById(table) var ctx = { 
       worksheet: name || 'Worksheet', 
       table: table.innerHTML 
      } 
      window.location.href = uri + base64(format(template, ctx)) 
     } 
})()​ 

我想我需要類似的東西。

if($(table).display.style!="none") 

在此先感謝。

+0

你會從表中的行必須循環和導出HTML每個細胞,取決於單元格的列是否可見或不可見。 –

回答

2

最簡單的方法是在將表格傳遞給格式函數之前從列表中刪除列。由於您要拋棄頁面以導航到數據URI,因此保留隱藏列並不重要。

刪除隱藏列的方式取決於如何將列隱藏在第一位。如果只是將display:none應用於隱藏的TD,則可以通過對代碼進行此更改來完成此操作。

return function(table, name) { 
     if (!table.nodeType) 
      table = document.getElementById(table); 

     $(table).find(':not(:visible)').remove(); 

     var ctx = { 
      worksheet: name || 'Worksheet', 
      table: table.innerHTML 
     }; 

     window.location.href = uri + base64(format(template, ctx)); 
    }; 
+0

+1:比我的建議更好... –

+0

蒂姆,謝謝你的工作完美。謝謝!! – user1497166

1

您也可以用簡單的jQuery的內容導出表爲Excel格式,使用window.open()方法。這也將解決顯示:無問題以簡單的方式:)

MIMETYPE:可選。您正在寫入的文檔類型。默認值是「text/html」。

替換:可選。如果設置,則新文檔的歷史記錄條目從打開此文檔的文檔繼承歷史記錄條目。

下面的jQuery代碼將表格數據導出到Excel。

$("#btnExport").click(function(e) { 
    window.open('data:application/vnd.ms-excel,' + $('#dvData').html()); 
    e.preventDefault(); 
}); 

如果你的表格HTML包含特殊字符,那麼在發送html到excel之前,它必須被編碼。

$("#btnExport").click(function(e) { 
    window.open('data:application/vnd.ms-excel,' + encodeURIComponent($('#dvData').html())); 
    e.preventDefault(); 
});​ 

的jsfiddle示例 - http://jsfiddle.net/jquerybyexample/xhYcD/

+0

結果中的所有空間在我的情況下會奇蹟般地消失。你有類似的問題嗎? – Vlado

0
$("#btnExport").click(function(e) { 

    window.open('data:application/vnd.ms-excel,' + encodeURIComponent($('#export').html())); 

});