我有一个 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/