【问题标题】:Exceljs+nodejs to serve excel streamExceljs+nodejs 提供 excel 流
【发布时间】:2023-04-03 23:20:01
【问题描述】:

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

【问题讨论】:

    标签: javascript node.js exceljs


    【解决方案1】:

    试试这个。

    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 函数中对我不起作用。

    【讨论】:

    • 我认为 nodejs 中的缓冲区最大为 1 gb,正如我所提到的,它必须使用流式传输,因为其中一些 excel 文件很大
    • 哦..我明白了,那么您确实必须使用流。
    • 这是我使用的,但我无法弄清楚内容长度标题
    【解决方案2】:

    除了@ireshan pathirana 回答,workbook.xlsx.write 可以用,不需要文件缓冲(

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-10
      相关资源
      最近更新 更多