使用流来使用ExcelJS修改现有的Excel文件

时间:2018-03-13 03:03:38

标签: 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)
  })
})

1 个答案:

答案 0 :(得分:0)

我假设你正在使用exceljs(ExcelJS Package)。如果没有,这不会适用。

如果要使用流式传输,则会以不同方式初始化工作簿。不是使用构造函数设置工作簿,而是按照以下方式执行操作:

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

选项是:

{
    filename: 'filename'
}

写作界面为Excel.stream.xlsx.WorkbookWriter(options);

之后,其他一切都可以完成。该软件包列出了一些细微差别:

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

只要你能在这些限制范围内工作,流媒体选项就可能是最适合你的内存性能选项。