nodejs下载多sheet excel文件:
1.引入node-xlsx:
npm intall node-xlsx
2.工具类封装:excelUtils
const xlsx = require('node-xlsx');
const fs = require('fs');
//方法封装
let sendExcel = function (array) {
let bufferArray = [];
array.forEach((v, i) => {
if (v && v.fieldObj && v.fieldData && v.fieldData.length > 0) {
const resultData = [];
const title = [];
let obj = v.fieldObj;
for (let tit in obj) {
let alias = obj[tit].alias;
title.push(alias);
}
resultData.push(title);
v.fieldData.forEach(function (doc1) {
let value = [];
for (let key1 in obj) {
if (doc1[key1]) {
value.push(doc1[key1]);
} else {
value.push('');
}
}
;
resultData.push(value);
});
bufferArray.push({name: v.sheetName, data: resultData})
}
});
if (bufferArray.length > 0) {
const buffer = xlsx.build(bufferArray);
return buffer;
} else {
return null;
}
};
exports.sendExcel = sendExcel;
3.测试:test.js【引入excelUtils.js】
function test() {
let array = [
{
//列对应关系,即标题,此处也可以使用field1:value形式,相应的工具类中也要修改
fieldObj: {
field1: {
alias: "字段1"
},
field2: {
alias: "字段2"
},
field3: {
alias: "字段3"
}
},
//fieldData:sql查询出来数据
fieldData: [
{
field1: "内容1-1",
field2: "内容1-2",
field3: "内容1-3"
},
{
field1: "内容2-1",
field2: "内容2-2",
field3: "内容2-3"
},
],
//当前的sheet名称
sheetName: "统计sheet"
},
{
fieldObj: {
field1: {
alias: "字段1"
},
field2: {
alias: "字段2"
},
field3: {
alias: "字段3"
}
},
fieldData: [
{
field1: "内容1-1",
field2: "内容1-2",
field3: "内容1-3"
},
{
field1: "内容2-1",
field2: "内容2-2",
field3: "内容2-3"
},
],
sheetName: "数据sheet"
}
];
let sendExcel1 = sendExcel(array);
/**当前路径下生成excel文件*****************************************************/
const writer = fs.createWriteStream('./outinput.xlsx');
writer.write(sendExcel1);
/**通过浏览器写出文件**********************************************************/
/*let res;//respose指的是响应对象
let tableName = "test.xlsx";//导出文件名称:此处最好使用固定名称,真正的文件名应当由前端去命名,避免中文乱码问题
if(sendExcel1){
res.setHeader('Content-Type', 'application/vnd.openxmlformats;charset=utf-8');
res.setHeader("Content-Disposition", "attachment; filename=" +encodeURIComponent(tableName));
res.end(result);
}*/
/**通过浏览器写出文件**********************************************************/
}