NodeJs使用excelbuilder在响应中发送excel文件

时间:2018-03-14 10:29:44

标签: node.js excel angular

在对内容进行个性化设置后,我正在使用NodeJs中的以下代码创建excel表

workbook.save(function (ok) {
   if (!ok)
       workbook.cancel();
   else
       console.log('Workbook saved successfully');

这会成功保存我服务器端的工作簿。现在我想将它发送给Angular客户端。我尝试使用以下代码发送它:

__parentDir = path.dirname(process.mainModule.filename);
res.sendFile(__parentDir + '/timesheet.xlsx');

当我在浏览器中运行它时,文件下载成功。但是当我在Postman中运行它时,我会得到如下响应:

�~nL_rels/PK�~nL    docProps/PK �~nLxl/PK �~nL  xl/_rels/PK �~nL xl/theme/PK �~nLxl/worksheets/PK

这是否意味着文件已损坏?如果是这样如何在浏览器中正确下载?如果它没有损坏,那么为什么不在角度代码中下载呢?我试图通过Angular中的以下代码下载它:

downloadType1(record) {
console.log(record._id);
const _this = this;
_this.appService
  .downloadTimeSheet(record._id)
  .subscribe(data => {
    console.log(data['data']);
    var urlCreator = window.URL;
    if (urlCreator) {
      var blob = new Blob([data], { type: 'application/octet-stream' });
      var url = urlCreator.createObjectURL(blob);
      var a = document.createElement("a");
      document.body.appendChild(a);
      a.href = url;
      a.download = "download.xlsx"; 
      a.click();
      window.URL.revokeObjectURL(url);
    }
  }),
  error => console.log("Error downloading the file."),
  () => console.info("OK");
}

我不知道我做错了什么。我必须更改服务器端(节点)或客户端(Angular)上的代码?

1 个答案:

答案 0 :(得分:0)

在进行如下所示的get调用之前,您需要设置responseType和http标头:

------------------------- ### -----------------
let getfileheaders = new HttpHeaders().set('Accept', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');

return this.http.get(this.getappsecdesignfileurl, {responseType: 'blob', headers: getfileheaders});

这很重要: {responseType:'blob',标头:getfileheaders}

引用此链接:How to download an excel (xlsx) file using Angular 5 HttpClient get method with Node/Express backend?