2012-08-31 106 views
0

我有一個帶有表格的Web應用程序。我需要添加一個導出到excel按鈕,這樣當按鈕被點擊時,頁面中的當前表格被下載。 我試了下面的代碼:將數據從表格導出到JSP中的Excel中

<script type="text/javascript"> 
var tableToExcel = (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)) 
    } 
})() 
</script> 

我從互聯網上得到。它適用於Chrome,但在Firefox中它下載文件爲xxx.xls.part,並且不適用於Internet Explorer。 我不知道哪個瀏覽器用戶會使用,所以我需要它在所有瀏覽器上工作。

我在這裏做什麼錯了? 或者還有其他方法可以做到這一點。

Plz help。

在此先感謝。

注:我知道這種類型的問題被問幾次,但沒有一個在我的情況下工作。所以請幫助。

注2:我有,我不能使用任何外部庫,如POI或JXLS一個約束

回答

1

您發佈的Javascript代碼生成data: URI包含一個「Excel的HTML」文件,而不是一個真正的Excel工作簿(XLS或XLSX)文檔。

data: URIs(see Wikipedia)受到大多數當代瀏覽器(IE8和更高版本)的支持,但IE8僅支持圖像的數據URI,這是出於安全原因。

大多數「導出到Excel」實現只是生成一個可以由Excel操作的CSV文件,但這意味着您不能包含格式,公式,多個工作表和宏等內容。

使用新的Office Open XML標準,您可以使用標準Zip文件和XML庫(存在於基本Java庫中)來生成和修改Office文檔,但OOXML文檔非常複雜,因此需要大量工作(除非你可以找到其他人已經做到這一點)。出於好奇,爲什麼你不能使用外部庫?這只是在您的項目中引用他們的Jar文件並捆綁它們。

另一種方法是生成「Excel HTML」文件,就像你現在正在做的那樣,但是服務器端而不是依靠Javascript。我不知道你對JSP有多好,但從Servlet返回自定義內容是一件微不足道的任務。

+0

它是由客戶端施加的外部限制。我不能有外部依賴。有沒有辦法做到這一點沒有外部依賴? – heretolearn

+0

我建議先用蟋蟀拍打你的客戶。之後,您仍然可以使用標準的java.util.zip類來打開或創建* .xlsx文件,然後使用'javax.xml'來修改或創建'xl \ workbook.xml'文件。玩的開心。 – Dai

相關問題