gpt4 book ai didi

javascript - 如何将 .xlsx 数据作为 blob 保存到文件中

转载 作者:行者123 更新时间:2023-12-03 02:41:26 34 4
gpt4 key购买 nike

我有一个与此问题类似的问题(Javascript: Exporting large text/csv file crashes Google Chrome):

我正在尝试保存由 excelbuilder.jsEB.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();

如果我将上述代码中的[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;
}

关于javascript - 如何将 .xlsx 数据作为 blob 保存到文件中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34993292/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com