【发布时间】:2020-07-25 17:28:48
【问题描述】:
在各种解决方案的帮助下,我有了一个 javascript CSV 函数,可以将 JSON 数据转换为 CSV 格式。
代码是这样的:
function convertToCSV(headers, objArray) {
var header_line = "";
for (const [key, value] of Object.entries(headers)) {
header_line += [key, value] + "\n";
}
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";
}
var csv = header_line + "\n" + str;
return csv;
}
function exportCSVFile(headers, columns, items, fileTitle) {
if (columns) {
items.unshift(columns);
}
var jsonObject = JSON.stringify(items);
var csv = convertToCSV(headers, jsonObject);
var exportedFilenmae = fileTitle + ".csv" || "export.csv";
var blob = new Blob([csv], { type: "text/csv;charset=utf-8;" });
if (navigator.msSaveBlob) {
navigator.msSaveBlob(blob, exportedFilenmae);
} else {
var link = document.createElement("a");
if (link.download !== undefined) {
var url = URL.createObjectURL(blob);
link.setAttribute("href", url);
link.setAttribute("download", exportedFilenmae);
link.style.visibility = "hidden";
document.body.appendChild(link);
link.click();
document.body.removeChild(link);
}
}
}
export default function generateCSV(dataarray, filename) {
var columns = {
"Count": "Count",
Coeff: "Coeff",
};
var headers = {
"# Some random long sheet title": "",
"# User Id": "37467yteyuw8473872938100j",
"# Created on": new Date() + "\t\t",
};
let json_data= [
{
"Count": "55",
Coeff: "56",
},
{
"Count": "55",
Coeff: "56",
},
{
"Count": "55",
Coeff: "56",
},
];
var formatItems = [];
json_data.forEach((item) => {
formatItems.push({
"Count": item["Count"],
Coeff: item["Coeff"]
});
});
var fileTitle = "my_data";
exportCSVFile(headers, columns, itemsFormatted, fileTitle);
}
功能完全正常。卡住的问题案例是:
- 标题文本
# Created On在文件被下载然后打开时被隐藏。下载文件时,需要手动拖动此列,使其完全可见。
-
如果标题键中包含逗号 (,),例如:
var headers = {"# Some random long, sheet title": "", "# User Id": "37467yteyuw8473872938100j", "# Created on": new Date() + "\t\t", };
对此的任何帮助表示赞赏。在此先感谢:)
【问题讨论】:
-
尝试引用它。
-
@DaveNewton 我试过了。但是没有用。你能帮我修改代码吗?
-
只需在所有标题中添加引号。
-
@DaveNewton 引号已经在那里了
-
我没有看到任何在字符串中添加引号的代码。我可能会错过它(在移动设备上);你能指出哪一行在输出中添加引号?
标签: javascript arrays json csv