公司项目需要导出excel报表,封装nodejs一个方法,
查找数据库后直接调用这个方法,传入查到的数据和herder表头,th数据
/* 下载excel
* data = [{name:'aa',age:'22'},{name:'bb',age:'60岁'}]; //数据
* header = [{name:'姓名'},{age:'年龄'}]; //th
* downloadExcel(res,header, arr, 'demo');
* */
function
downloadExcel(
res,
header,
data,
fileName) {
let
content
=
'<style>tr,td{border:1px solid gray;text-align: left;}</style><table><tr>'
; //可以修饰样式
let
field = {},
keys = [];
fileName =
fileName ||
'download';
for (
let
i =
0,
len =
header.length;
i <
len;
i++) {
for (
let
key in
header[
i]) {
field[
key] =
header[
i][
key];
keys.
push(
key);
}
}
for (
let
key in
field) {
content +=
'<td>'+
field[
key]+
'</td>';
}
content +=
'</tr>';
for (
var
i =
0,
len =
data.length;
i <
len;
i++) {
content +=
'<tr>';
for (
var
j =
0,
len2 =
keys.length;
j <
len2;
j++) {
// if(keys[j] == 'Birth_Date'){
// console.log(data[i][keys[j]])
// } //这里可以处理数据
content +=
'<td>'+
data[
i][
keys[
j]]+
'</td>';
}
content +=
'</tr>';
}
content +=
'</table>';
let
buffer =
new
Buffer(
content);
let
iconv =
require(
'iconv-lite');
let
str =
iconv.
encode(
buffer,
'utf8');
res.
set({
'Content-Type':
'application/vnd.ms-execl',
'Content-Disposition':
"attachment;filename=" +
encodeURIComponent(
fileName +
'.xls'),
'Pragma':
'no-cache',
'Expires':
0
});
res.
send(
str);
}