node.js - 处理大型 XLSX 文件:Node.js 中超出了最大调用堆栈
问题描述
在处理具有 30,000 行的大型 xlsx 文件时,我一直在尝试修复错误。以下是我遇到问题的代码。
const readXlsxFile = require('read-excel-file/node');
readXlsxFile(filename, {schema}).then((rows) => {
rows = rows.rows
let productsDetails = []
rows.forEach((row, index) => {
Object.keys(db.productInventory.rawAttributes).forEach((column) => {
let data;
try {
<if else conditions for edge cases>
}
})
}
})
schema
对象有大约 30 个属性,如果缺少请忽略括号。
上面的代码适用于 1000 行 xlsx 文件。
我试图调试并将断点放在 .then() 函数中,但调试器没有到达那里。
当我点击运行代码时出现以下错误。
断开连接。错误:在 WriteWrap.afterWrite [as oncomplete] (net.js:789:14) 处写入 EPIPE
RangeError:超出最大调用堆栈大小
我无法弄清楚如何解决这个问题。任何人都可以帮忙吗?
解决方案
当我使用这个标志时它对我有用
node --max-old-space-size=4096 index.js
如果您不手动增加,V8 中的内存使用量有一个严格的标准限制,大约为 1.7 GB。但是,如果您仍然遇到问题并且无法正常工作,请尝试使用此库,它很有用。 https://github.com/SheetJS/js-xlsx
const fs = require('fs');
const XLSX = require('xlsx');
const xlsxFile = 'all_records.xlsx';
const outputFileName = "output.json";
const workbook = XLSX.read(xlsxFile, { type: 'file' });
const [firstSheetName] = workbook.SheetNames;
const worksheet = workbook.Sheets[firstSheetName];
const rows = XLSX.utils.sheet_to_json(worksheet, {
header: 'A',
range: 0,
blankrows: false,
defval: null,
raw: true,
});
const stream = fs.createWriteStream(outputFileName, {flags: 'w'});
stream.write(JSON.stringify(rows));
推荐阅读
- java - 如何解决 tanukisoftware 包装器中的“WrapperSimpleApp: Unable to locate the class ...”
- sql - 连接两个表并获取女性计数大于男性计数的部门名称
- python - 使用 python 改进将数据帧加载到 postgress db
- .htaccess - .htaccess 重写规则代码也无法正常工作
- python - 我试图使用 tensorflow 在自定义数据集上实现对象检测
- ios - 如何在导航栏swift ui中设置左右按钮(前导/尾随)?
- reactjs - 提交后表单未设置为空
- python - 如何将robot-ide (RIDE) 扩展为有一个选项卡,以便我可以拖放机器人脚本命令?
- java - Java 11 Cloud SDK 的 appengine:run 等价物是什么?
- css - Chrome 和 Firefox 中动态内容的不同滚动行为