我有一个模板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)
})
})
答案 0 :(得分:0)
我假设你正在使用exceljs(ExcelJS Package)。如果没有,这不会适用。
如果要使用流式传输,则会以不同方式初始化工作簿。不是使用构造函数设置工作簿,而是按照以下方式执行操作:
const workbook = new Excel.stream.xlsx.WorkbookReader(options);
选项是:
{
filename: 'filename'
}
写作界面为Excel.stream.xlsx.WorkbookWriter(options);
之后,其他一切都可以完成。该软件包列出了一些细微差别:
只要你能在这些限制范围内工作,流媒体选项就可能是最适合你的内存性能选项。