我的工作有问题。 因为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,我只想导出选定的字段。
答案 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');
}
*免责声明:未经测试的代码,仅用于解释目的