[英]Export html table to csv in Javascript
我有两个功能
导出 HTML 表 下载 CSV 文件
function exportTableToCSV(filename) {
var csv = [];
var rows = document.querySelectorAll("table tr");
for(var i = 0; i < rows.length; i++){
var row = [], cols = rows[i].querySelectorAll("td, th");
for(var j = 0; j < cols.length; j++){
row.push(cols[j].innerText);
}
csv.push(row.join(","));
}
// download csv file
downloadCSV(csv.join("\n"), filename);
}
function downloadCSV(csv, filename) {
var csvFile;
var downloadLink;
csvFile = new Blob([csv], {type:"text/csv"});
downloadLink = document.createElement("a");
downloadLink.download = filename;
downloadLink.href = window.URL.createObjectURL(csvFile);
downloadLink.style.display = "none";
document.body.appendChild(downloadLink);
downloadLink.click();
}
exportTableToCSV('test.csv');
我有一个情况,这段代码在有数组的地方工作得很好
[1,2] [3,4] [5,6]
但如果数据是
[1,"example1,data1",10] [2,"example1,data2",20]
csv 文件为示例 1 和数据 1 生成两个额外的列。我们如何确保“示例 1,数据 1”都保留在一列中。 如果数组中有多个逗号的字符串如何实现?
谢谢,
斯瓦蒂
//dataToBeDocumented= [{object},{object},{object}] 应该是这个格式
function ConvertToCSV(objArray) {
var array = typeof objArray != "object" ? JSON.parse(objArray) : objArray;
try {
var str = "";
var obj = array[0] ? array[0] : null;
var res = Object.keys(obj);
} catch (err) {
return err;
}
res = res.join(",");
// console.log(res);
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";
}
// console.log(str);
return res + "\r\n" + str;
}
function makeCSV(content, outputFileName) {
this.content = content;
if (typeof this.content === "string") {
this.content = JSON.parse(this.content);
}
try {
var uri = "data:text/csv;charset=utf-8," + ConvertToCSV(this.content);
} catch (err) {
throw err;
}
var downloadLink = document.createElement("a");
downloadLink.href = uri;
var opFileName = `${outputFileName}.csv`;
// console.log(opFileName);
downloadLink.download = opFileName;
document.body.appendChild(downloadLink);
downloadLink.click();
document.body.removeChild(downloadLink);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.