我知道有很多这样的问题,但我需要使用JavaScript来解决这个问题。我使用Dojo 1.8
并将所有属性信息放在数组中,如下所示:
[["name1", "city_name1", ...]["name2", "city_name2", ...]]
你知道如何在客户端将其导出到CSV
吗?
发布于 2013-02-20 03:51:14
您可以在原生JavaScript中完成此操作。因此,您必须将数据解析为正确的CSV格式(假设您使用了一个数组数组来存储数据,如问题中所述):
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):
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.open
和encodeURI
函数下载CSV文件,如下所示:
var encodedUri = encodeURI(csvContent);
window.open(encodedUri);
编辑:
如果您想给您的文件指定一个特定的名称,您必须做一些稍微不同的事情,因为这不支持使用window.open
方法访问数据URI。为此,可以创建一个隐藏的<a>
DOM节点并设置其download
属性,如下所示:
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".
发布于 2014-07-24 07:32:43
基于上面的回答,我创建了这个函数,我已经在IE 11、Chrome 36和Firefox 29上进行了测试
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);
}
}
}
发布于 2013-11-08 18:47:25
来自@Default的解决方案在Chrome上运行完美(非常感谢!)但我对IE有个问题。
这里有一个解决方案(适用于IE10):
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")
https://stackoverflow.com/questions/14964035
复制相似问题