繁体   English   中英

"Exceljs+nodejs 提供 excel 流"

[英]Exceljs+nodejs to serve excel stream

假设我想使用 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()
}

尝试这个。

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);

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

除了@ireshan pathirana 答案, workbook.xlsx.write<\/code>可以使用,不需要文件缓冲区(

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
 workbook.xlsx.write(res);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM