node+ejsexcel导出xlsx文件的简单demo
项目要增加一个生成报表的功能,只是一个前端小白,不会做。那就各种查,看见几位大佬分享的内容,帮助很大,记录一下,自己也当做个笔记
一开始我是用 参照 https://www.cnblogs.com/cyfhykx/p/9121176.html 这位大佬调用excel-export库的方法,不过这个导出的时候只能用get请求,如果用post请求的话是只返回一些乱码的(我是做完才发现= ),如果你是get请求方法的话,可以参照这位大佬的方法比较快就可以做出来。
后来我使用的ejsexcel,国内一位牛人开发的,一开始我还是有点懵的,没有想到代码还可以在.xlsx的文件里面写.后来了解到要先写模板,然后通过ejsexcel导入数据。 ejsexcel 这是github项目的地址,模板这里还是要多看看的。
下面是我写的简单demo
我的数据格式在下面代码里
模板和数据有啦,就可以进行下一步啦
下面贴代码
var exceltt=require("./exceltt.js")
var fs = require("fs");
var qs = require('querystring');
data=[ //数据源
{"id":"1","dev":"徒骇河区","num":"50"},
{"id":"2","dev":"齐水河区","num":"60"},
{"id":"3","dev":"商水河区","num":"70"},
{"id":"4","dev":"巨野河区","num":"80"}
]
let fliepath = "地址统计表格式" //模板表名称
let fliename = "地址统计表.xlsx" //表下载时的名称
exceltt.excelta(fliepath, {list:data},function(path){ //请求另一个node模块的文件进行数据渲染
res.send({name: fliename, path: path}) //给前端返回渲染好的文件地址和文件名,“get”请求一下就可以在浏览器下载
})
请求的exceltt.文件代码
var fs = require("fs");
var ejsExcel = require("ejsexcel");
var excelta = function (file, data, cb) {
//获取Excel模板的buffer对象
var exlBuf = fs.readFileSync("./excelTemplate/" + file + ".xlsx");
var path = Date.now() + ".xls"; //临时文件名
//用数据源(对象)data渲染Excel模板
ejsExcel.renderExcel(exlBuf, data).then(function (exlBuf2) {
//将数据方进模板开始渲染
fs.writeFileSync("./download/" + path, exlBuf2);
cb(path)
}).catch(function (err) {
console.error(err);
});
}
module.exports = {
excelta: excelta //导出
};
最后导出结果
参考链接https://segmentfault.com/a/1190000012992783