1

我有一个模板 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)
  })
})
4

1 回答 1

0

我假设您使用的是 exceljs ( ExcelJS Package )。如果没有,这将不适用。

如果您想使用流式传输,则以不同方式初始化您的工作簿。与其使用构造函数设置工作簿,不如执行以下操作:

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

选项在哪里:

{
    filename: 'filename'
}

写的界面是Excel.stream.xlsx.WorkbookWriter(options);

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

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

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

于 2018-03-13T03:14:52.260 回答