2017-09-11 55 views
0

我正在學習Angular 2,我試圖通過使用web api從sql server表中提取客戶數據來以角度2下載Excel文件。如何在角度2下載Excel文件

在谷歌搜索後,我發現一些代碼,但使用這些代碼,我能夠下載,但它不包含正確的數據和文件名也有一些GUID格式

下面是我使用的代碼:

元器件

 GetRemindersData() 
     { 
      var Flag="ALL_SPOTCHECK_RECORDS"; 
      this.httpService.GetRemindersData(Flag).subscribe(
      data=>this.downloadFile(JSON.stringify(data[1])), 
      error => console.log("Error downloading the file."), 
      () => console.info("OK")); 

     } 

     downloadFile(data:any){ 
      console.log(data); 
     var blob = new Blob([data], { type: 'application/vnd.ms-excel' }); 
      var url= window.URL.createObjectURL(blob); 
      window.open(url); 
      } 

Service.ts

   public GetRemindersData(Flag:string){ 

       var GetRemindersData_URL:string = 'http://localhost:5000/api/RemindersData/?Flag='+Flag; 


       return this.http.get(`${GetRemindersData_URL}`) 
          .map((res:Response) => res.json()) 
          .catch((error:any) => Observable.throw(error.json().error || 'Server error')); 
      }  
+0

您可以創建從數據你前面的Excel文件的文件顯示。看看[這裏](https://stackoverflow.com/a/44766181)的答案,看看它是如何完成的。 – BogdanC

+0

上述參考後,我有'coudld沒有找到模塊'xlsx'的聲明文件的錯誤。 '/ node_modules /xlsx/xlsx.js'隱式具有'任何'類型。' – user3301440

+1

我有一個Angular演示應用程序實現'xlsx' [here](https://github.com/bogdancar/xlsx-json-to-xlsx-demo-Angular2)。克隆它,看看它是如何工作的。 – BogdanC

回答

0

服務返回JSON,它必須返回BLOB類型,你可以做這樣的

return this.http.get(url,{responseType: ResponseContentType.Blob }).map(
    (res) => { 
     return new Blob([res.blob()], { type: 'application/vnd.ms-excel' }) 
    }) 

也看看這個帖子angular2 file downlaod

+0

使用上面的代碼後,我剛剛得到一個未定義的字符串值excel文件 – user3301440

+0

你可以後端響應 – Robert

+0

支持的響應是json對象數組 – user3301440