带角度的Firebase:仅将选定的字段导出,以使检索到的带有角度的Firebase卓越

时间:2019-03-19 05:33:21

标签: excel angular firebase

我的工作有问题。 因为Firebase的Web / JavaScript API始终会在我们请求的节点下返回完整的树

因此,在我的情况下,我首先从Firebase中检索了所有现有字段,包括敏感字段,然后,然后我只想导出到excel选定字段,而不是我导出的所有字段。问题是,我总是能够成功导出所有现有字段,包括敏感字段。

我可以仅导出所选字段并排除敏感字段吗?下面是我的代码:

我检索所有字段,包括从Firebase的.ts文件中的数据,如下所示:

 getData() {
    this.dataLoading = true;
    this.querySubscription = this._backendService.getDocs('report')
      .subscribe(members => {
        this.members = members;
        this.dataSource = new MatTableDataSource(members);
        this.dataSource.paginator = this.paginator;
        this.dataSource.sort = this.sort;
      },
        (error) => {
          this.error = true;
          this.errorMessage = error.message;
          this.dataLoading = false;
        },
        () => { this.error = false; this.dataLoading = false; });
  }

    //export func
    exportAsXLSX():void{
      this._backendService.exportAsExcelFile(this.members, 'sample');
    }

我的后端服务代码:

    getDocs(coll:string,filters?:any){
    this.itemsCollection=this.afs.collection<any>(this.getCollectionURL(coll));
    return this.itemsCollection.valueChanges();
  }

    getCollectionURL(filter){
        return "ReportApp/fajar/"+filter;
      }

    //export func
    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'] };
      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});
       FileSaver.saveAs(data, fileName + '_export_' + new  Date().getTime() + EXCEL_EXTENSION);
    }

作为参考,我使用此处的代码导出到excel:https://medium.com/@madhavmahesh/exporting-an-excel-file-in-angular-927756ac9857

如您所见,我将所有数据放入 this.member 变量并导出em,但是结果是我导出了所有em,我只想导出选定的字段。

1 个答案:

答案 0 :(得分:0)

在将成员数据数组发送到exportAsExcelFile()方法之前,您需要“整理”该成员数据数组。您的问题是您要将成员数据的 ALL 传递给该导出功能。因此,解决方案是在调用导出功能之前 删除所有敏感信息。

exportAsXLSX():void {
    // TRIM DOWN ARRAY HERE
    this._backendService.exportAsExcelFile(this.members, 'sample');
}

由于您未提供成员数据库结构或未考虑敏感信息的详细信息,因此我将提供一个通用示例。您有一个成员数组...您很可能已经将数组中的每个“成员”变成了一个对象...因此我们需要遍历该数组并删除每个成员对象的“敏感”属性。 / p>

作为预防措施,由于我们不想从ACTUAL数组中删除属性,因此,由于数组是reference-types,并且由于您可能需要在其他地方使用这些详细信息,因此,请复制该数组- a deep copy以确保甚至复制嵌套对象。

var newMemberArray = JSON.parse(JSON.stringify(this.members))

然后,我们需要遍历该新数组并删除我们的敏感属性:

newMemberArray.forEach(function(m){
    delete m.sensitivePropertyName1;
    delete m.sensitivePropertyName2;
});

并将经过“消毒”的数组传递给导出函数...因此将所有这些放在一起,就像:

exportAsXLSX():void {
    var newMemberArray = JSON.parse(JSON.stringify(this.members))
    newMemberArray.forEach(function(m){ delete m.sensitivePropertyName });
    this._backendService.exportAsExcelFile(newMemberArray, 'sample');
}

*免责声明:未经测试的代码,仅用于解释目的