【发布时间】:2017-11-07 21:06:57
【问题描述】:
我知道这是一个已经回答的问题,但找不到适合我的解决方案。
我有一个 HTML 按钮,当点击它时,会在 typescript(基本上是 javascript)中生成一个对象数组,我想生成一个将被下载的 csv 文件。
以下是 javascript 对象数组的示例:
var items = [
{ "name": "Item 1", "color": "Green", "size": "X-Large" },
{ "name": "Item 2", "color": "Green", "size": "X-Large" },
{ "name": "Item 3", "color": "Green", "size": "X-Large" }];
// Loop the array of objects
for(let row = 0; row < items.length; row++){
let keysAmount = Object.keys(items[row]).length
let keysCounter = 0
// If this is the first row, generate the headings
if(row === 0){
// Loop each property of the object
for(let key in items[row]){
// This is to not add a comma at the last cell
// The '\n' adds a new line
csv += key + (keysCounter+1 < keysAmount ? ',' : '\r\n' )
keysCounter++
}
}else{
for(let key in items[row]){
csv += items[row][key] + (keysCounter+1 < keysAmount ? ',' : '\r\n' )
keysCounter++
}
}
keysCounter = 0
}
console.log(csv)
var hiddenElement = document.createElement('a');
hiddenElement.href = 'data:text/csv;charset=utf-8,' + encodeURI(csv);
hiddenElement.target = '_blank';
hiddenElement.download = 'people.csv';
hiddenElement.click();
我尝试了这个示例代码,但在我的情况下,它创建了 csv 文件,但没有在 csv 文件中正确插入 csv 字符串,csv 字符串包含由逗号分隔的元素行,每一行由换行,但是这里每行的所有数据都位于 csv 文件的一个单元格中,我该如何使每行的每个值都位于不同的单元格中?
这是它的 csv 字符串:
name,color,size
Item 2,Green,X-Large
Item 3,Green,X-Large
【问题讨论】:
-
this.ConvertToCSV(data)是您制作的自定义函数吗?你能告诉我们它的作用吗? -
什么是
ConvertToCSV?它的输出是什么样的? -
另外,如果问题在
console.log中很明显,为什么不从问题中排除其余的下载代码呢?这似乎无关紧要。 -
这里是convertToCSV(data)函数,我刚刚添加了它,该函数将对象数组转换为csv字符串
-
我更新了代码,我正在取得进展,但我仍然没有得到我想要的结果
标签: javascript arrays json object export-to-csv