According to luwojtaszek answer in this topic: How to Export JSON to CSV or Excel - Angular 2 I implemented a pice of code:
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));
}
}
Above code works fine and eventually generates an excel file. Because of size of data it takes few seconds to generate a file (almost 10 MB). I would like to show some fancy animation to notify user, that it is in progress. The problem is I can't return an observable, or I don't know how to use it properly.
I created a service that I inject through constructor and then I subscribe to function this way:
this.loading = true;
return this._excelExporterService.exportAsExcelFile(this.data,'file').subscribe(x=> {
if(x)
this.loading = false;
})
and this is how my service looks:
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);
}