在 NodeJS 中将大型 XLSX(超过 600MB)解析/转换为 CSV

问题描述 投票:0回答:2

我在将超过 600mb 的大型 XLSX 转换为 CSV 时遇到了问题。问题是对于较小的文件(> 3MB)没问题,但是当涉及到大文件时,我可以看到它是如何耗尽整个内存然后创建一个空的 test.csv 文件。

到目前为止,我使用了这个模块:node-xlsx
我在这里遵循指南:在 Node 中的服务器上将 XLS 转换为 CSV

javascript node.js excel csv xlsx
2个回答
0
投票

您遵循的指南适用于较小的文件。然而XLSX是最有名的。

但是由于对节点 RAM 使用的限制,它对于大文件也会失败。

您可以通过 --max_old_space_size=4096 增加允许的 RAM,其中 4096=4GB


-1
投票

大床单不起作用的主要问题是我在升级到

node: v7.10.1 (with npm 4.2.0)
后在
node: v14.17.0 (with npm 6.14.13)
上。我在运行我的节点脚本时也使用了
--max-old-space-size=4096

节点 XLSX

我只是在 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));
}

SheetJS js-xlsx

我仍然包括这个解决方案,因为它在更大的工作表出现问题之前运行良好,我也喜欢它有 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"});
});
© www.soinside.com 2019 - 2024. All rights reserved.