这里采用的是ejsExcel,实现在Node.js端导出excel,采用的是模板+数据的形式,定义好模板,往里面放数据,简单易行好维护,使用的是Nodejs的ejsExcel导出excel插件
采用这种方法导出需要先定义好要导出的表的模板,然后数据部分采用ejs格式来实现
https://github.com/sail-sail/ejsExcel
1.安装
npm install ejsexcel
2.加载ejsExcel库和fs库
var ejsExcel=require("./ejsExcel");
var fs=require("fs");
3.创建excel模板
循环数据结果集
<%for RBegin rs1,i in _data_%>
<%for REnd(1)%>
渲染数据
<%=rs1.id%>
4.从数据库读取数据后渲染到excel模板中
//获得Excel模板的buffer对象
var exlBuf=fs.readFileSync("./public/excelop/template/finance_d.xlsx");
var excelname="~"+y+m+d+hh+mm+ss+".xlsx";//数据源
var sql1="select*frombookingwherebookingnolike'"+key+"%'";
mysql.query(sql1,function(error,obj){
if(error){console.log(error);returnfalse;}//用数据源(对象)data渲染Excel模板/
ejsExcel.renderExcelCb(exlBuf,obj,function(exlBuf2){
fs.writeFileSync("./public/excelop/temp/"+excelname,exlBuf2);
res.send(excelname);
});
});
官方模板
Excel表格中需要数据的单元格
<%=data[0].table_name%>
Nodejs服务器端代码
var ejsExcel = require("../ejsExcel");
var fs = require("fs");
//获得Excel模板的buffer对象
var exlBuf = fs.readFileSync("./template1.xlsx");
//数据源
var data = [{"table_name":"现金报表"}];
//用数据源(对象)data渲染Excel模板
ejsExcel.renderExcelCb(exlBuf, data, function(exlBuf2){
fs.writeFileSync("./report1.xlsx", exlBuf2);
console.log("生成report1.xlsx");
});
最后在服务器端返回生成的excel表路径到客户端就可以下载了
其他导出Excel方法可以参考
http://tommyhu.cn/nodejs-export-excel