node.js - 使用 ExcelJS 使用流修改现有 Excel 文件

标签 node.js exceljs nodejs-stream

我有一个 Excel 模板文件,我需要使用可读流将数据写入该文件,然后将结果文件流回服务器响应以供下载。

这是我到目前为止所得到的,使用 exceljs 。但这不是“真正的”流,因为工作簿在发送到响应之前已保存到内存中。

const path = require('path')
const Excel = require('exceljs')
const dao = require('./dao')

const stream = dao.getData().stream()
const workbook = new Excel.Workbook()

workbook.xlsx.readFile(path.join(__dirname, 'Template.xlsx'))
.then(() => {
  const detailSheet = workbook.getWorksheet('Detail')
  detailSheet.columns = colName.header.detail

  stream.on('data', (d) => {
    detailSheet.addRow(d).commit()
  })

  stream.on('end', () => {
    workbook.xlsx.write(res)
  })
})

最佳答案

我假设您正在使用 exceljs ( ExcelJS Package )。如果不是,则不适用。

如果您想使用流式处理,则可以以不同的方式初始化工作簿。您无需使用构造函数设置工作簿,而是执行以下操作:

const workbook = new Excel.stream.xlsx.WorkbookReader(options);

其中选项是:

{
    filename: 'filename'
}

写入的接口(interface)是Excel.stream.xlsx.WorkbookWriter(options);

之后其他一切都可以做同样的事情。该软件包确实列出了一些细微的差异:

  • 工作表一旦添加到工作簿中,就无法删除。
  • 提交行后,将无法再访问该行,因为它已从工作表中删除。
  • 不支持 unMergeCells()。

只要您能够在这些限制范围内工作,流式传输选项可能是您的内存性能最高的选项。

关于node.js - 使用 ExcelJS 使用流修改现有 Excel 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49247641/

相关文章:

node.js - 当 Node http-server 运行时,Nginx 反向代理似乎无法工作

javascript - Nodejs crypto.getHashes() 返回一个空数组

node.js - 通过管道将 axios 请求发送到 pkgcloud 存储上传会导致 "write after end"错误

node.js - 如何关闭 socket.io 连接

Node.js安装问题

node.js - 什么是 ".v8flags.3.14.5.9.{Name}"?

exceljs - 货币格式为excelJS

node.js - 从后端发送一个Excel文件到前端,并在前端下载

javascript - 你如何捕捉流转换错误?