У меня 265 467 строк и 500 столбцов данных. Пользователь должен иметь возможность загружать эти данные в формате Excel, используя angular и c # - PullRequest
0 голосов
/ 17 июня 2019

Ниже приведен код моего углового компонента, я несколько раз вызываю exportAsXLSX (), чтобы не получать исключений из webapi

           exportAsXLSX(): void {
           this.providerService.getALLDataExcel(this.skipForExcel, 
           this.takeForExcel).subscribe(
           (response) => 
           this.getSearchProviderExcelDataSucces(response),
           (error) => this.getSearchProviderExcelDataFailure(error));
           }

Сейчас я делаю 20 запросов на тестирование.Для 250 000 записей мне, возможно, придется сделать 200 запросов,

           i: number = 0;
           getSearchProviderExcelDataSucces(response) {
           if (this.i != 20) {
           this.providerExcel = this.providerExcel.concat(response)
           this.skipForExcel = this.skipForExcel + 1000;
           this.exportAsXLSX();
           this.i = this.i + 1;
           }
           else {
           this.excelService.exportAsExcelFile(this.providerExcel, 
           'test');
           }

ниже - мой сервис, я пытаюсь получить 1000 записей одновременно из веб-API,

           httpOptions = {
           headers: new HttpHeaders({
           'Access-Control-Allow-Origin':'*',
           'Content-Type': 'application/json',
            })
           }

       getALLDataExcel(skip: number, take: number): Observable<any> 
       {
         const options = new RequestOptions({
         responseType: ResponseContentType.Blob,
       });
       let Searchparams = new HttpParams();
       Searchparams = Searchparams.append('skip', skip.toString());
       Searchparams = Searchparams.append('take', take.toString());
       return this.http.get<any>(this.Url + 
       'providers/GetSearchData/GetALLDataDataForExcel',
       { 
         params: Searchparams,headers: this.httpOptions.headers},)
         .pipe(map(this.extractData));   
       }

Служба Excel дляскачать данные в формате Excel

       const EXCEL_TYPE = 'application/vnd.openxmlformats- 
       officedocument.spreadsheetml.sheet;charset=UTF-8';
       const EXCEL_EXTENSION = '.xlsx';
       @Injectable({
       providedIn: 'root'
       })
       export class ExcelService {
       constructor() {}
       public exportAsExcelFile(json: any[], excelFileName: string): 
       void 
       {
        const worksheet: XLSX.WorkSheet = 
        XLSX.utils.json_to_sheet(json);
        console.log('worksheet',worksheet);
        const workbook: XLSX.WorkBook = { Sheets: { 'data': worksheet 
       }, 
       SheetNames: ['data'] };
       const excelBuffer: any = XLSX.write(workbook, { bookType: 
       'xlsx', 
       type: 
       'array' 
       });

          this.saveAsExcelFile(excelBuffer, excelFileName);
       }

    private saveAsExcelFile(buffer: any, fileName: string): void {
    const data: Blob = new Blob([buffer], {
    type: EXCEL_TYPE
    });

    var date=new Date().toISOString().substr(0, 19).replace('T', ' 
    ').replace(/\-/g,'');
    FileSaver.saveAs(data, fileName  +'_'+ date.slice(0,date.indexOf(' 
    ')) 
    + EXCEL_EXTENSION);
    }
   }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...