You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用npm的XLSX包读取103MB Excel文件无响应,求解决方法

解决XLSX包读取大Excel文件无响应的问题
  • 替换同步文件读取为异步方式
    同步读取fs.readFileSync会阻塞Node.js事件循环,大文件加载时会导致程序长时间无响应。改用异步读取:

    const fs = require('fs/promises');
    
    async function readExcel() {
      try {
        const buff = await fs.readFile(fileLocation);
        const workbook = XLSX.read(buff, options);
        // 后续处理逻辑
      } catch (err) {
        console.error('读取或解析出错:', err);
      }
    }
    readExcel();
    
  • 修正日期格式配置错误
    你的dateNF格式字符串存在问题:"dd/mmmm/yyyy hh:ss:MMMM"里的MMMM(月份全称)放在时分秒位置完全无效,会导致解析逻辑异常。改为合理的日期时间格式,同时注意raw: true会跳过格式转换,和cellDates: true冲突,需按需调整:

    const options: XLSX.ParsingOptions = { 
      cellDates: true, 
      dateNF: "dd/mmmm/yyyy hh:mm:ss", 
      raw: false
    };
    
  • 使用流式解析处理大文件
    100MB级别的文件一次性加载到内存会占用大量资源,甚至触发内存溢出。改用XLSX的流式API逐段处理:

    const { createReadStream } = require('fs');
    const { stream } = require('xlsx');
    
    const fileStream = createReadStream(fileLocation);
    const workbookReader = stream.read(fileStream, { cellDates: true, dateNF: "dd/mmmm/yyyy hh:mm:ss" });
    
    workbookReader.on('worksheet', (ws) => {
      ws.on('row', (row) => {
        // 逐行处理数据
        console.log(row);
      });
      ws.on('end', () => {
        console.log('当前工作表处理完成');
      });
    });
    
    workbookReader.on('error', (err) => {
      console.error('流式解析出错:', err);
    });
    
    workbookReader.on('end', () => {
      console.log('整个文件解析完成');
    });
    
  • 添加错误捕获机制
    原代码没有错误捕获逻辑,即使发生错误也无法察觉。同步代码用try/catch包裹,异步代码通过catch捕获异常:

    try {
      const buff = fs.readFileSync(fileLocation);
      const workbook = XLSX.read(buff, options);
      // 后续处理
    } catch (err) {
      console.error('操作失败:', err);
    }
    
  • 增加Node.js内存限制
    大文件解析需要更多内存,启动Node.js时手动调整内存上限:

    node --max-old-space-size=4096 your-script.js
    

    这里设置为4GB,可根据实际硬件情况调整数值。

内容的提问来源于stack exchange,提问作者sevila

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 10:52:10