Скачать несколько файлов по exceljs - PullRequest
0 голосов
/ 20 сентября 2019

У меня проблема при попытке создать несколько файлов Excel на сервере (node.js) и отправить эти файлы клиенту.Я также пытался отправить несколько запросов со стороны клиента, но сервер отправил мне только 1 файл / раз для загрузки.Пожалуйста, помогите. Большое спасибо!

ОТ СТОРОНЫ КЛИЕНТА Я перебираю список запросов на загрузку и отправляю каждый запрос на сервер

listReques.forEach(data => {
        var sendString = JSON.stringify(data);

       //sent request
        requestSent(sendString)
      });

function requestSent (requests){
      var request = new XMLHttpRequest();
      request.open('POST', '/download', true);
      request.setRequestHeader('Content-type', 'application/json');
      request.responseType = 'blob';
      request.send(requests); 
      request.onload = function(e) {
          //do some thing...
        };
}

ОТ СТОРОНЫ СЕРВЕРА Я записываю данныев существующую книгу Excel и попробуйте отправить эту книгу клиенту

function createBill(dataWriteBill, nameBill, builNumber, type, res){
    var workbook = new Excel.Workbook();
    workbook.xlsx.readFile('./data/excel/template.xlsx')
    .then(function() {
        let listHeader = Object.keys(dataWriteBill[0]);
        var worksheet = workbook.getWorksheet('Data');

        let listColumns = [];
        listHeader.map(d=>{ 
            let obj = {};
            obj.header = d;
            obj.key = d;
            obj.width = 20;
            listColumns.push(obj)
        })
       worksheet.columns = listColumns
       var row = worksheet.getRow(1);
       dataWriteBill.map(d=> worksheet.addRow(d))
       worksheet.getColumn(20).values = [builNumber]
       worksheet.getColumn(21).values = [type]
       row.commit();

       res.setHeader('Content-Type', 'application/vnd.openxmlformats- 
          officedocument.spreadsheetml.sheet');
       res.setHeader('Content-Disposition', `${nameBill}`);
       return workbook.xlsx.write(res).then(()=>{
            res.status(200).end();
      });   
    })
}
...