首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何将JavaScript阵列信息导出到csv (在客户端)?

如何将JavaScript阵列信息导出到csv (在客户端)?
EN

Stack Overflow用户
提问于 2013-02-20 00:49:24
回答 25查看 769.4K关注 0票数 652

我知道有很多这样的问题,但我需要使用JavaScript来解决这个问题。我使用Dojo 1.8并将所有属性信息放在数组中,如下所示:

代码语言:javascript
复制
[["name1", "city_name1", ...]["name2", "city_name2", ...]]

你知道如何在客户端将其导出到CSV吗?

EN

回答 25

Stack Overflow用户

回答已采纳

发布于 2013-02-20 03:51:14

您可以在原生JavaScript中完成此操作。因此,您必须将数据解析为正确的CSV格式(假设您使用了一个数组数组来存储数据,如问题中所述):

代码语言:javascript
复制
const rows = [
    ["name1", "city1", "some other info"],
    ["name2", "city2", "more info"]
];

let csvContent = "data:text/csv;charset=utf-8,";

rows.forEach(function(rowArray) {
    let row = rowArray.join(",");
    csvContent += row + "\r\n";
});

或者更简单的方法(使用arrow functions):

代码语言:javascript
复制
const rows = [
    ["name1", "city1", "some other info"],
    ["name2", "city2", "more info"]
];

let csvContent = "data:text/csv;charset=utf-8," 
    + rows.map(e => e.join(",")).join("\n");

然后,您可以使用JavaScript的window.openencodeURI函数下载CSV文件,如下所示:

代码语言:javascript
复制
var encodedUri = encodeURI(csvContent);
window.open(encodedUri);

编辑:

如果您想给您的文件指定一个特定的名称,您必须做一些稍微不同的事情,因为这不支持使用window.open方法访问数据URI。为此,可以创建一个隐藏的<a> DOM节点并设置其download属性,如下所示:

代码语言:javascript
复制
var encodedUri = encodeURI(csvContent);
var link = document.createElement("a");
link.setAttribute("href", encodedUri);
link.setAttribute("download", "my_data.csv");
document.body.appendChild(link); // Required for FF

link.click(); // This will download the data file named "my_data.csv".
票数 1.1K
EN

Stack Overflow用户

发布于 2014-07-24 07:32:43

基于上面的回答,我创建了这个函数,我已经在IE 11、Chrome 36和Firefox 29上进行了测试

代码语言:javascript
复制
function exportToCsv(filename, rows) {
    var processRow = function (row) {
        var finalVal = '';
        for (var j = 0; j < row.length; j++) {
            var innerValue = row[j] === null ? '' : row[j].toString();
            if (row[j] instanceof Date) {
                innerValue = row[j].toLocaleString();
            };
            var result = innerValue.replace(/"/g, '""');
            if (result.search(/("|,|\n)/g) >= 0)
                result = '"' + result + '"';
            if (j > 0)
                finalVal += ',';
            finalVal += result;
        }
        return finalVal + '\n';
    };

    var csvFile = '';
    for (var i = 0; i < rows.length; i++) {
        csvFile += processRow(rows[i]);
    }

    var blob = new Blob([csvFile], { type: 'text/csv;charset=utf-8;' });
    if (navigator.msSaveBlob) { // IE 10+
        navigator.msSaveBlob(blob, filename);
    } else {
        var link = document.createElement("a");
        if (link.download !== undefined) { // feature detection
            // Browsers that support HTML5 download attribute
            var url = URL.createObjectURL(blob);
            link.setAttribute("href", url);
            link.setAttribute("download", filename);
            link.style.visibility = 'hidden';
            document.body.appendChild(link);
            link.click();
            document.body.removeChild(link);
        }
    }
}

例如:https://jsfiddle.net/jossef/m3rrLzk0/

票数 310
EN

Stack Overflow用户

发布于 2013-11-08 18:47:25

来自@Default的解决方案在Chrome上运行完美(非常感谢!)但我对IE有个问题。

这里有一个解决方案(适用于IE10):

代码语言:javascript
复制
var csvContent=data; //here we load our csv data 
var blob = new Blob([csvContent],{
    type: "text/csv;charset=utf-8;"
});

navigator.msSaveBlob(blob, "filename.csv")
票数 35
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14964035

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档