在一个 Angular 项目中,我尝试实现一个函数,从对象数组生成 CSV 文件。
对象数组填充了一个 ng-Table,所以一开始我尝试使用:http://bazalt-cms.com/ng-table/example/15 这在 Chrome 中效果很好,但在 IE 中根本不起作用,因为它需要使用下载属性...
然后我尝试了这种方法
var objArray = [
{ name: "Item 1", color: "Green", size: "X-Large" },
{ name: "Item 2", color: "Green", size: "X-Large" },
{ name: "Item 3", color: "Green", size: "X-Large" }];
var array = typeof objArray != 'object' ? JSON.parse(objArray) : objArray;
var str = '';
for (var i = 0; i < array.length; i++) {
var line = '';
for (var index in array[i]) {
if (line != '') line += ','
line += array[i][index];
}
str += line + '\r\n';
}
但是,现在一行的所有数据都在一个列中。我想要需要不同列上的数据。
预期输出(在 Excel 中打开后)
有人知道如何做到这一点吗?
最佳答案
这看起来像一个 Excel 问题。
But, now all the data of a row is in one single column. I want need the data on seperate columns... (once opened in Excel)
您正在创建这样的文件: Convert JSON format to CSV format for MS Excel
问题是您的文件没有 csv 扩展名。不要双击该文件或让 IE 自动打开它,而是打开 Excel 并选择"file">“打开”。浏览到该文件并单击“打开”。这将调用文本导入向导,您可以在其中指定逗号作为分隔符。
更新
您可以通过在第一行添加“sep=,”来告诉 Excel 如何处理该文件。在您的代码中,在循环后添加以下行:
str = 'sep=,\r\n' + str;
如果您在记事本中打开该文件,它将如下所示:
sep=,
名称、颜色、尺寸
商品 1,绿色,加大号
商品 2,绿色,加大号
商品 3,绿色,加大号
但是,当在 Excel 中打开文件时,只会显示标题和数据:
这是一个演示,来自Joseph Sturtevant's fiddle 张贴在 the related question 的答案中: http://jsfiddle.net/wittwerj/6JySt/
关于javascript - 具有分隔列的 JSON 到 CSV,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22382321/