Exceljs + nodejs для обслуживания потока Excel - PullRequest
0 голосов
/ 08 февраля 2020

Предположим, я хочу использовать Excel js для обслуживания 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()
}

1 Ответ

0 голосов
/ 08 февраля 2020

попробуйте это.

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() в excel js и, похоже, он работает нормально с индикатором прогресса. Но я работал с небольшими файлами. Но вы можете проверить этот подход. Я использовал этот подход, потому что вышеупомянутый метод у меня не работал в azure функциях.

...