我正在尝试在浏览器应用程序中生成非常大的Microsoft Excel文件。虽然有JavaScript库允许我从浏览器生成XLSX文件,但它们的问题是它们需要在写入之前将所有文档内容加载到内存中,这给了我可以存储多少内容的上限在浏览器崩溃之前的单个文件中。因此,我希望有一个写入流,允许我使用类似StreamSaver.js的内容将数据顺序写入Excel文件。
用CSV做这样的事情是微不足道的:
for (let i = 0; i < paginatedRequest.length; i++) {
writer.write(paginatedRequest[i].join(",") + "\n");
}
上面的方法允许我将非常大量的CSV行写入输出流,而不必将所有数据存储在内存中。我的问题是:这在技术上是否可以使用XLSX文件?
我主要担心的是内部XLSX文件是ZIP存档,所以我的第一个想法是使用未压缩的ZIP存档并对其进行流写入,但ZIP存档中的每个文件都带有一个标题,表示其大小和我事先不可能知道。有没有我可以使用的解决方法?
最后,如果不可能,是否有其他可流式电子表格格式可以在Excel中打开并“看起来不错”? (有一个带有.fods扩展名的平面OpenDocument规范,所以我可以将写入流传输到这样的文件。遗憾的是,Microsoft Office不支持平面OpenDocument文件。)
答案 0 :(得分:0)
一种可能的解决方案是生成一个小的静态XLSX文件,该文件使用Excel Data Model导入外部CSV文件。由于生成流式CSV文件几乎是微不足道的,这可能是一个可行的解决方案。但是,它有些令人不满意: