我对此问题有一个类似的问题(Javascript:导出大文本/ csv文件使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打开。
谢谢!
我和你有同样的问题。事实证明,您需要将Excel数据文件转换为ArrayBuffer。
var blob = new Blob([s2ab(atob(data))], {
type: ''
});
href = URL.createObjectURL(blob);
s2ab(字符串到数组缓冲区)方法(我从https://github.com/SheetJS/js-xlsx/blob/master/README.md获得)是:
function s2ab(s) {
var buf = new ArrayBuffer(s.length);
var view = new Uint8Array(buf);
for (var i=0; i!=s.length; ++i) view[i] = s.charCodeAt(i) & 0xFF;
return buf;
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句