我有一個類似的問題,這個問題(Javascript: Exporting large text/csv file crashes Google Chrome):如何保存的.xlsx數據文件作爲BLOB
我想節省excelbuilder.js的EB.createFile()
功能創建的數據。如果我把文件數據作爲鏈接的href
屬性值,它就可以工作。但是,當數據很大時,會導致Chrome瀏覽器崩潰。代碼是這樣的:
//generate a temp <a /> tag
var link = document.createElement("a");
link.href = 'data:application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;base64,' + encodeURIComponent(data);
link.style = "visibility:hidden";
link.download = fileName;
document.body.appendChild(link);
link.click();
document.body.removeChild(link);
我的代碼創建一個使用excelbuilder.js數據就像如下:
var artistWorkbook = EB.createWorkbook();
var albumList = artistWorkbook.createWorksheet({name: 'Album List'});
albumList.setData(originalData);
artistWorkbook.addWorksheet(albumList);
var data = EB.createFile(artistWorkbook);
正如所建議的類似的問題(Javascript: Exporting large text/csv file crashes Google Chrome)的答案,一個blob需要被創建。
我的問題是,保存在文件中的內容不是Excel可以打開的有效Excel文件。我用它來保存blob
的代碼是這樣的:
var blob = new Blob(
[data],
{type: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;base64,"}
);
// Programatically create a link and click it:
var a = document.createElement("a");
a.href = URL.createObjectURL(blob);
a.download = fileName;
a.click();
如果我[Base64.decode(data)]
替換上述代碼[data]
,內容在文件中保存看起來更像預期的Excel數據,但仍不能由Excel打開。
謝謝!
這似乎不適用於原始數據(即服務器原樣返回的excel文件)。事實上「s」返回未定義。任何線索? – dragonmnl
謝謝,工作完美。 – Dugh