在Visual Studio MVC应用程序中使用TypeScript 2.2和Angular,我有一个对象(“标头”)存储一组数据的标头名称。该对象当前是高级硬编码的。我需要更改它以根据数据动态填充。最终,此数据导出到CSV。当前,代码类似于以下内容:
let output = (this.allData);
let headers = {};
let formattedItems = [];
let csvData: any;
let fileName = "file.xls";
headers = {
customerName = "CustomerName",
productName1 = "Product Name 1",
productName2 = "Product Name 2",
monthYear = "Month/Year"
};
output.forEach((item) => {
formattedItems.push ({
customerName: (item.Id > 0 ) ? item.Name : '',
productName1: (item.Id > 0 ) ? item.Count : '',
productName2: (item.Id > 0 ) ? item.Count : '',
monthYear: (item.Id > 0 ) ? item.SaleDate: '',
});
});
csvData = this.exportCsv(headers, formattedItems);
this.exportCSV(csvData, fileName);
我需要修改代码以执行以下操作:
秒,相应地追加数据行
标题= {
customerName =“ CustomerName”,
//如果(columnName如“产品”)
//然后创建新的列名;
monthYear =“月/年”
};
生成的文件将从只有两个“产品名称”列更改为
|客户名称|耐克鞋|阿迪达斯鞋| 2012年3月
可变数量的“产品名称”列:
|客户名称|耐克鞋|阿迪达斯鞋|锐步鞋|新百伦鞋| 2012年3月
答案 0 :(得分:0)
我最终将标头更改为数组,然后将数据动态添加到数组的末尾:
let headers = [];
headers = ['CustomerName', 'Month/Year' ]
output.forEach((item) => {
formattedItems.push ({
customerName: (item.Id > 0 ) ? item.Name : '',
monthYear: (item.Id > 0 ) ? item.SaleDate: '',
});
});
//Dynamically add an extra column for each product
for (let x = 0; itemsFormatted.length > x; x++) {
for (let y = 0; this.products.length > y; y++) {
if (x == 0) {
//Add new header name to array
headers.push(this.companyOnboarders[y].name);
}
//Add data for corresponding header
itemsFormatted[x][this.products[y].name] = this.products[y].count
}
}
csvData = this.exportCsv(headers, formattedItems);
this.exportCSV(csvData, fileName);