【发布时间】:2019-12-27 02:20:54
【问题描述】:
根据 luwojtaszek 在本主题中的回答: How to Export JSON to CSV or Excel - Angular 2 我实现了一段代码:
public exportAsExcelFile(json: any[], excelFileName: string): void {
const worksheet: XLSX.WorkSheet = XLSX.utils.json_to_sheet(json);
const workbook: XLSX.WorkBook = {Sheets: {'data': worksheet}, SheetNames: ['data']};
XLSX.writeFile(workbook, ExcelService.toExportFileName(excelFileName));
}
}
以上代码运行良好,最终生成了一个 excel 文件。 由于数据的大小,生成一个文件需要几秒钟(几乎 10 MB)。 我想展示一些精美的动画来通知用户,它正在进行中。 问题是我无法返回 observable,或者我不知道如何正确使用它。
我创建了一个通过构造函数注入的服务,然后以这种方式订阅函数:
this.loading = true;
return this._excelExporterService.exportAsExcelFile(this.data,'file').subscribe(x=> {
if(x)
this.loading = false;
})
这就是我的服务的样子:
public exportAsExcelFile(json: any[], excelFileName: string): Observable<boolean> {
const worksheet: XLSX.WorkSheet = XLSX.utils.json_to_sheet(json);
const workbook: XLSX.WorkBook = {Sheets: {'data': worksheet}, SheetNames: ['data']};
let x: boolean;
XLSX.writeFile(workbook, ExcelExporterService.toExportFileName(excelFileName));
return Observable.of(true);
}
【问题讨论】:
-
为 exportAsExcelFile 函数添加等待并返回 XLSX.writeFile 怎么样;;公共异步 exportAsExcelFile ... return XLSX.writeFile(workbook....} this._excelExporterService.exportAsExcelFile(this.data,'file').then(d =>{ this.loading = false }).catch(e= >{})
-
编辑了答案以包含替代方案。
标签: javascript angular