我在将超过 600mb 的大型 XLSX 转换为 CSV 时遇到了问题。问题是对于较小的文件(> 3MB)没问题,但是当涉及到大文件时,我可以看到它是如何耗尽整个内存然后创建一个空的 test.csv 文件。
到目前为止,我使用了这个模块:node-xlsx
我在这里遵循指南:在 Node 中的服务器上将 XLS 转换为 CSV
您遵循的指南适用于较小的文件。然而XLSX是最有名的。
但是由于对节点 RAM 使用的限制,它对于大文件也会失败。
您可以通过 --max_old_space_size=4096 增加允许的 RAM,其中 4096=4GB
大床单不起作用的主要问题是我在升级到
node: v7.10.1 (with npm 4.2.0)
后在node: v14.17.0 (with npm 6.14.13)
上。我在运行我的节点脚本时也使用了--max-old-space-size=4096
。
我只是在 SheetJS 由于更大的工作表而没有输出数据之后才开始使用这个。我将此解决方案与 PapaParse 一起使用,因为我发现它易于使用。
const xlsx = require('node-xlsx');
const Papa = require('papaparse');
const fs = require('fs');
var obj = xlsx.parse(inputPath);
for(var i = 0; i < obj.length; i++) {
var sheet = obj[i];
fs.writeFile(`${outputPath}.${i}.csv`, Papa.unparse(sheet.data));
}
我仍然包括这个解决方案,因为它在更大的工作表出现问题之前运行良好,我也喜欢它有 CLI 命令。
用于将 excel 转换为 CSV 的 CLI 命令:
xlsx --book -o 'output.csv' 'input.xlsx'
在节点中执行相同操作的代码
const XLSX = require('xlsx');
const workBook = XLSX.readFile(inputPath);
workBook.SheetNames.forEach((sheet, idx) => {
XLSX.writeFile(workBook, `${outputPath}.${idx}.csv`, {sheet: sheet, bookType: "csv"});
});