JavaScript根据json数据或table表格导出CSV文件
<!DOCTYPE html>
<html lang="zh">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>JavaScript导出CSV文件</title>
<link rel="stylesheet" type="text/css" href="bootstrap-3.4.1-dist/css/bootstrap.css" />
</head>
<style type="text/css">
</style>
<body>
<div class="col-lg-12">
<button type="button" class="btn btn-primary" id="btn1">从表格导出CSV</button>
<button type="button" class="btn btn-primary" id="btn2">根据json数据导出CSV</button>
<table class="table table-bordered" id="tableId">
<thead>
<tr>
<th>序号</th>
<th>姓名</th>
<th>电话</th>
<th>资产/亿元</th>
</tr>
</thead>
<tbody id="tbody">
<tr>
<td>1</td>
<td>马云</td>
<td>10086</td>
<td>3874</td>
</tr>
<tr>
<td>2</td>
<td>马化腾</td>
<td>10086</td>
<td>3527</td>
</tr>
<tr>
<td>3</td>
<td>许家印</td>
<td>10086</td>
<td>2759</td>
</tr>
</tbody>
</table>
</div>
</body>
<script src="js/jquery-3.4.1.min.js"></script>
<script type="text/javascript">
function byTableDownLoadCsv(tableId, csvFileName) {
let js_csv = {
export_csv: function(data, name) {
var uri = 'data:text/csv;charset=utf-8,\ufeff' + encodeURIComponent(data);
var downloadLink = document.createElement("a");
downloadLink.href = uri;
downloadLink.download = (name + ".csv") || "temp.csv";
document.body.appendChild(downloadLink);
downloadLink.click();
document.body.removeChild(downloadLink);
},
export_table: function(selector, name) {
var self = this;
if (document.querySelectorAll(selector).length == 0) {
alert('Selector "' + selector + '" not exists!');
return false;
}
self.export_csv(self.get_table_data(selector), name);
},
get_table_data: function(selector) {
var data = "";
document.querySelectorAll(selector + ' tr').forEach(function(t) {
var tmp = [];
t.querySelectorAll('th,td').forEach(function(e) {
tmp.push(e.innerText.replace("\n", ""));
});
data += tmp.join(",") + "\n";
});
return data;
}
};
js_csv.export_table(tableId, csvFileName);
};
let jsonData = new Array(10).fill({
name: '小明',
tel: 10086,
money: 1000
});
let str = ""
for (let i = 0; i < jsonData.length; i++) {
str += `<tr><td>${i+1}</td>`
let item = jsonData[i];
for (key in item) {
str += `<td>${item[key]}</td>`
}
}
document.querySelector("#tbody").innerHTML = str
function byJsonDownLoadCsv(data, csvTrName, fileName) {
let jsonData = data;
let str = csvTrName;
for (let i = 0; i < jsonData.length; i++) {
for (let item in jsonData[i]) {
str += `${jsonData[i][item] + '\t'},`;
}
str += '\n';
}
let uri = 'data:text/csv;charset=utf-8,\ufeff' + encodeURIComponent(str);
let link = document.createElement("a");
link.href = uri;
link.download = `${fileName}.csv`;
document.body.appendChild(link);
link.click();
document.body.removeChild(link);
};
document.querySelector("#btn1").onclick = function() {
byTableDownLoadCsv('#tableId', '从表格导出的文件');
}
document.querySelector("#btn2").onclick = function() {
byJsonDownLoadCsv(jsonData, `姓名,电话,资产(亿元)\n`, '根据json数据导出的文件');
}
</script>
</html>