有的时候我们希望能在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); }); }); },