javascript - 具有分隔列的 JSON 到 CSV

标签 javascript json angularjs internet-explorer export-to-csv

在一个 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 中打开后)

enter image description here

有人知道如何做到这一点吗?

最佳答案

这看起来像一个 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 中打开文件时,只会显示标题和数据:
csv opened in Excel

这是一个演示,来自Joseph Sturtevant's fiddle 张贴在 the related question 的答案中: http://jsfiddle.net/wittwerj/6JySt/

关于javascript - 具有分隔列的 JSON 到 CSV,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22382321/

相关文章:

javascript - 调整屏幕大小时,我的多元素轮播正在折叠(Bootstrap)

.net - Json.NET - 如何使用自定义解析器序列化类

javascript - typescript 无法访问 JSON 对象 (Angular2)

python - Ansible - When 语句使用变量

javascript - 为两个 DyGraph 设置一个 showRangeSelector?

http - 无法使用 $http angularjs 获取结果数据

javascript - setInterval - 如何保留传入的变量

javascript - 使用 JavaScript 查找字符串中的某些数据

php - 将 anchor 标记与表单的操作属性结合使用

ruby-on-rails - Angular ng-show 大于未评估