excel - Firebase with angular:仅将所选字段导出到使用 angular 检索的 firebase 中的 excel
问题描述
我的工作有问题。因为 Firebase 的 Web/JavaScript API 总是返回我们请求的节点下的完整树。
因此,在我的情况下,我首先从 firebase 检索了所有现有字段,包括敏感字段,然后我只想导出到 excel 选定字段,而不是我得到的所有字段。问题是,我总是成功导出所有现有字段,包括敏感字段。
我可以只导出选定的字段并排除敏感字段吗?下面是我的代码:
我在我的 .ts 文件中检索我的所有字段,包括来自 firebase 的数据,如下所示:
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,我只想导出选定的字段。
解决方案
exportAsExcelFile()
在将成员数据发送到您的方法之前,您需要“修剪”该数组。您的问题是您将所有成员数据传递给该导出函数。所以解决方案是在调用导出函数之前删除所有敏感信息。
exportAsXLSX():void {
// TRIM DOWN ARRAY HERE
this._backendService.exportAsExcelFile(this.members, 'sample');
}
由于您没有提供您的成员数据库结构或您认为敏感信息的详细信息,我将提供一个通用示例。你有一个成员数组……很可能,你已经将数组中的每个“成员”都变成了一个对象……所以我们需要遍历该数组并删除每个成员对象的“敏感”属性。
作为预防措施,因为我们不想从 ACTUAL 数组中删除属性,因为数组是引用类型,并且由于您可能在其他地方需要这些详细信息......让我们制作一个数组的副本 -一个深层副本以确保甚至嵌套的对象也会被复制。
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');
}
*免责声明:未经测试的代码,仅用于解释目的
推荐阅读
- python - 将 2 个正则表达式函数合并为 1 个函数
- javascript - 浏览器随机删除cookies
- csvhelper - CSVHelper:一行,多个类图
- java - 如何在 Java Spring、STS 中设置 Run Configuration 的环境区域?
- c# - 在 Unity 和 C# 中沿其面对的方向移动刚体
- flutter - 在谷歌地图上热重载之前不显示标记,颤抖
- java - 当在同一索引下给定多个值时,作为数组工作但自动增长到第二维的数据结构是什么?
- javascript - Nuxt & A-Frame VR
- javascript - 多少步才能归零
- android-studio - shadow jar 以避免在 android studio 中的依赖重复