导出功能放在后端做事最简单,最高效的。但是不排除某些特殊需求,比如多语言,后端无法做翻译的时候,需要前端先做翻译。实际上就是前端先把数据查询一遍,把数据和表头按语言翻译好之后再做导出功能。说真的,这种做法很low,但是数据混合在一起,后端没法翻译,只能前端来做,如果那位小伙伴有好的解决方案,可以留言告知在下。
插件: xlsx.core.min.js 、alasql.min.js
使用方法: 引入两个插件后,引入下列代码
var fileName = '导出的Excel表单名';
var exportData = [{a:1,b:2,c:3},{a:1,b:2,c:3},{a:1,b:2,c:3}];
alasql.promise('SELECT * INTO XLSX(" '+ fileName +'.xls",{headers:true}) FROM ?',[exportData])
.then(function (data) {
console.log(data)
})
调用上述代码之后导出效果如下:
设置表头
上述代码也看到了,导出的数据是个数组,表头就是前面的K恶意,只需要将要导出的数据翻译好,归类到相应的表头下,再导出即可实现手动设置表头。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<script src="./js/libs/alasql.min.js"></script>
<script src="./js/libs/xlsx.core.min.js"></script>
<title>导出excel</title>
</head>
<body>
<button onclick="ex()">导出</button>
<script>
var fileName = '导出的Excel表单名';
var exportData = [{a:1,b:2,c:3},{a:1,b:2,c:3},{a:1,b:2,c:3}];
var newArr = [];
exportData.forEach( function (value) {
var singleObj = [];
singleObj['表头1'] = value.a;
singleObj['表头2'] = value.b;
singleObj['表头3'] = value.c;
newArr.push(singleObj);
});
function ex(){
alasql.promise('SELECT * INTO XLSX(" '+ fileName +'.xls",{headers:true}) FROM ?',[newArr])
.then(function (data) {
console.log(data)
})
}
</script>
</body>
</html>
效果如下: