我对这个问题有类似的问题(Javascript:Exporting large text/csv file crashs Google Chrome):
我正在尝试保存由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:导出大文本/csv 文件使 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();
如果我将[data]
上述代码中的替换为[Base64.decode(data)]
,保存的文件中的内容看起来更像是预期的 excel 数据,但仍然无法被 Excel 打开。
谢谢!