有没有办法在 NodeJS 的流中加载内存中的 140mb+ Excel 文件?

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

我有 Excel 文件,每个文件的大小最大可达 150mb。我需要逐步加载该文件的块(例如,批量加载 1000 行),以便我可以将它们转换为 JSON 并操作它们。

我尝试使用 XLSX 库,它在流读取方面没有提供太多支持。我也尝试过 ExcelJS,但我发现总是包含类似的内容:

const workbook = new ExcelJS.Workbook();
await workbook.xlsx.readFile(inputFilePath);

所以它总是回到使用 XLSX 的 readFile() 并且我得到一个大小错误。

我还尝试使用 Gnumeric 将 Excel 文件转换为 CSV 以尝试以这种方式读取它,但它也引发了大小错误。

我还尝试使用node-excel-stream包中的ExcelReader,但它不灵活,因为我需要定义Excel文件中每个工作表的架构,而我并不总是拥有这些信息,而且我的Excel文件有时有一个标题行中存在空字符串 '',我想为每个空标题指定一个不同的值(例如 __EMPTY_CELL_01 等),以便以正确的格式输出我的 JSON 对象。

无论我往哪里看,这似乎都是一个死胡同,它开始让我沮丧:((我是我工作中的实习生,我的主管对 NodeJS 没有太多经验)。

有谁知道可以帮助我吗?

node.js xlsx exceljs gnumeric node-xlsx
1个回答
0
投票

要在 Node.js 中的流中加载内存中的大型 Excel 文件,可以考虑以下方法:

  1. 避免加载整个文件:而不是加载整个文件 进入内存,分块处理文件。这可以通过阅读来完成 流中的文件。
  2. 使用流媒体库:可以使用exceljs或xlsx等库 读取和写入 Excel 文件,但对于大文件,您可能需要 将它们与 Node.js 流结合使用来处理数据 高效。
  3. Transform Streams:您可以使用变换流来处理 正在读取 Excel 文件。这允许您转换 Excel 批量将数据转换成JSON格式,然后可以进行操作 需要。
  4. 批量处理:批量处理数据(例如,一次处理 1000 行) time)以避免内存溢出问题。
  5. 错误处理:实施适当的错误处理来捕获和管理 在流式传输和处理过程中可能出现的任何错误 文件。

这是一个示例代码片段,演示如何使用流读取 Excel 文件

const fs = require('fs');
const ExcelJS = require('exceljs');

// Create a read stream for the Excel file
const readStream = fs.createReadStream('path/to/your/large/excel/file.xlsx');

// Create a new workbook instance
const workbook = new ExcelJS.Workbook();

// Read the Excel file in streams
readStream
  .pipe(workbook.xlsx.createReadStream())
  .on('data', (data) => {
    // Process each chunk of data here
    // Convert to JSON, manipulate, etc.
  })
  .on('end', () => {
    // Finalize processing when the stream ends
  })
  .on('error', (error) => {
    // Handle any errors that occur during the stream
  });

此代码为 Excel 文件设置一个读取流,并通过

exceljs
库的读取流方法将其传输。当数据以块的形式读取时,您可以根据需要处理每个块。确保将
'path/to/your/large/excel/file.xlsx'
替换为 Excel 文件的实际路径。

请记住在运行此代码之前安装必要的 Node.js 包(

exceljs
fs
等)。另外,根据您的具体要求调整错误处理和数据处理。

© www.soinside.com 2019 - 2024. All rights reserved.