有的时候我们希望能在Server端通过代码把数据生成Excel文件,如果是Nodejs的话,ExcelJs可以很好的满足我们的要求。使用非常简单,可以看官网的例子。
ExcelJS官方地址:https://www.npmjs.com/package/exceljs
中文文档地址:https://github.com/exceljs/exceljs/blob/HEAD/README_zh.md

下面是一个Nodejs 使用的例子:
const detailTextFont = {
// 字体名
name: 'Yu Gothic Regular (本文)',
// Font family for fallback. An integer value.
family: 4,
// 字体大小
size: 11,
// 下划线
underline: false,
// 加粗
bold: false,
};
// nodejs 方法
router.post('/createExcel', async function (req, res) {
const jsonParm = req.body;
// 从数据库取得某些数据
const returnData = dataBase.xxxxxxx(dbschema, jsonParm)
// 生成workbook对象
const workbook = new Excel.Workbook();
// 读取本地的一个Excel文件(模版文件)
await workbook.xlsx.readFile("./template.xlsx");
// 获取文件的一个Sheet页面
const worksheet = workbook.getWorksheet('shee1');
// 给K1单元格赋值
worksheet.getCell('K1').value = "XXXX";
// 给N4单元格赋值
worksheet.getCell('N4').value = "XXXXX";
// 给N4单元格赋值设定字体
worksheet.getCell('N4').font = detailTitleFontBold;
// 从网络上下载图片到Server端本地目录
var downLoadFlag = await downLoadImage("imageName")
// 如果下载成功,把图片插入到Excel中
if (downLoadFlag) {
const imageId1 = workbook.addImage({
filename: imageName,
extension: 'png',
});
worksheet.addImage(imageId1, 'D37:T47');
}
}
// 保存修改到Excel文件
workbook.xlsx.writeFile(fileName + ".xlsx").then(function () {
// 如果成功,读取把Excel文件,并把Excel文件返回到Http Response中
fs.createReadStream(fileName + ".xlsx").pipe(res);
// 设定Http Response的Header,注意跨域
res.writeHead(200, {
'Access-Control-Allow-Origin': '*',
'Access-Control-Allow-Headers': 'X-Requested-With',
'Access-Control-Allow-Methods': 'PUT,POST,GET,DELETE,OPTIONS',
'Content-Type': 'application/octet-stream;charset=UTF8',
'Content-Disposition': 'attachment; filename=' + fileName + '.xlsx'
});
// 后续操作 删除相关的图片 和 生成的Excel文件。
fs.unlinkSync(fileName + ".xlsx");
fs.unlinkSync(imageName);
}
});
});
浏览器端VUE调用的例子
createExcelFile() {
return new Promise((resolve, reject) => {
let jsonData = {
ids: xxxx,
};
this.$axios({
// timeout时间
timeout: 180000,
method: "post",
url: "https://xxxxx/createExcel",
data: jsonData,
// 注意responseType blob
responseType: "blob"
})
.then((response) => {
const fileName = new Date().format("yyyyMMddhhmm");
let url = window.URL.createObjectURL(new Blob([response.data]));
let link = document.createElement("a");
link.style.display = "none";
link.href = url;
link.setAttribute("download", fileName + ".xlsx");
document.body.appendChild(link);
link.click();
})
.catch((error) => {
reject(error);
});
});
},