js前端数据Excel格式导出到本地
/*
* 数据导出到Excel
* titleData 标题
* JSONData 数据
* ReportTitle 文件名
* ShowLabel 显示 默认true
* chineseLaberMapping json格式的翻译 {'sensor' : '传感器'}
*/
var chineseLaberMapping = {};
function JSONToCSVConvertor(titleData, JSONData, ReportTitle, ShowLabel) {
//如果JSONData不是对象,那么JSON.parse将解析对象中的JSON字符串
var arrData = typeof JSONData != 'object' ? JSON.parse(JSONData) : JSONData;
//console.log(arrData.toString());
var CSV = '';
//此条件将生成标签/标题
if (ShowLabel) {
var row = "";
//这个循环将从on数组的第一个索引中提取标签
for (var index in titleData) {
//console.log(titData[index]+"------------");
//现在将每个值转换为字符串和逗号分隔
var th=titleData[index].toString().replace(/_/,'');
if(row.indexOf(th)>=0){
}else{
row += titleData[index] + ',';
}
}
row = row.slice(0, -1);
var englishLabels=row.split(",");
for (var i = 0; i < englishLabels.length; i++) {
if(chineseLaberMapping[englishLabels[i]]){
//console.log(englishLabels[i]);
//console.log(englishLabels[i]+"--"+chineseLaberMapping[englishLabels[i]]);
englishLabels[i]=chineseLaberMapping[englishLabels[i]];
}
}
row = englishLabels.join(",");
//添加带换行符的标签行
CSV += row + '\r\n';
}
//第一个循环是提取每一行。
for (var i = arrData.length-1; i >= 0; i--) {
var row = "";
//内循环将提取每个列并将其转换为字符串逗号分隔
for (var index in arrData[i]) {
//console.log(arrData[i][index]);
if(index.toString().indexOf("-")>=0){
break;
}
row += '"' + arrData[i][index] + '",';
}
row.slice(0, row.length - 1);
//在每一行之后添加换行符
CSV += row + '\r\n';
}
if (CSV == '') {
alert("Invalid data");
return;
}
//生成一个文件名称
var fileName = "";
//这将从标题中删除空格,并用下划线替换
fileName += ReportTitle.replace(/ /g, "_");
//初始化文件格式,您需要csv或xls。
var uri = 'data:text/csv;charset=utf-8,\uFEFF' + encodeURI(CSV);
//现在是棘手的部分。
//你可以使用>> window.open(uri);
//但这在某些浏览器中是行不通的
//否则你将得不到正确的文件扩展名
//这个技巧将生成一个temp <a />标记
var link = document.createElement("a");
link.href = uri;
//这个技巧将生成一个temp <a />标记//设置隐藏的可见性,因此不会影响web布局
link.style = "visibility:hidden";
link.download = fileName + ".csv";
//此部分将在自动点击后添加锚标签并删除
document.body.appendChild(link);
link.click();
document.body.removeChild(link);
}
注意,传入的数据格式最好整理成JSON格式,根据业务的不同灵活更改算法。