首页 > 解决方案 > Exceljs+nodejs 提供 excel 流

问题描述

假设我想使用 exceljs 为 web 客户端提供 excel。另外,假设我正在使用流式传输(由于文件可能很大并且不想将它们保存在内存中)。

是否可以找出 Content-Length 标头应该是什么?因为没有这个,我看不到 chrome 的下载进度微调器。

示例代码:

app.get('/some/route', function(req, res) {
  res.writeHead(200, {
    'Content-Disposition': 'attachment; filename="file.xlsx"',
    'Content-Type': 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
    "Content-Length" : inf //this is what I want!!
  })
  var workbook = new Excel.stream.xlsx.WorkbookWriter({ stream: res })
  var worksheet = workbook.addWorksheet('some-worksheet')
  worksheet.addRow(['foo', 'bar']).commit()
  worksheet.commit()
  workbook.commit()
}

标签: javascriptnode.jsexceljs

解决方案


尝试这个。

res.set({
  'Content-Disposition': 'attachment; filename="ireshansexcel.xlsx"',
  'Content-Type': 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
});

 const workbook = new Excel.Workbook();
 const worksheet = workbook.addWorksheet('Survey');
 //your excel worksheet content
 //commit everything
 let fileBuffer = await workbook.xlsx.writeBuffer();
 res.send(fileBuffer);

我一直writeBuffer()在 exceljs 中使用方法,似乎它与进度微调器一起工作得很好。但我处理过小文件。但是您可以测试这种方法。我使用了这种方法,因为上面提到的方法在 azure 函数中对我不起作用。


推荐阅读