- 注意:使用时需要了解模板接受的数据格式,并不是直接搞上去就可以了,凡是不是要有个吻合度吗。
- 从数据库中取出数据

- 大致处理后的数据格式为:

- 这些都准备好了你还得需要样东西,模板;
 <%forRBegin rs,i in data[0]%>:开始循环;因为数据封装为 [ [{},{},{},{}.....] ];所以通过data[0], 即可取出所有数据,数组中套用数组; <%forREnd%>:结束循环; <%=rs.issue_name%>:通过你封装的key来取值;
- 现在是代码部分
- 加入ejsexcel
var ejsexcel = require('ejsexcel'); var fs = require('fs'); 当然,使用之前需要你添加这个模块(npm install ejsexcel)
- ./ GET export excel test. 导出excel议题/
router.get('/exportExcel', function (req, res, next) { var filedir = './public/uploadFile/temporaryFile/'; fs.ensureDir(filedir, function (err) { }); var meet_name = req.query.meet_name; try { //导出前判断要导出的文件是否存在,自己根据需求 fs.exists('./public/uploadFile/temporaryFile/' + meet_name + '_xxx.xlsx', function (r) { if (r) { fs.unlink('./public/uploadFile/temporaryFile/' + meet_name + '_xxx.xlsx', function (err) { if (err) throw err; }) } issueService.getIssueInfo(1, 10000, meet_name, function (result) { //查询数据 if (result.rows.length < 1) { //没有数据返回0页面获取判断返回值做出相应的提示 res.send("0"); } else { fs.ensureDir(filedir, function (err) {}); (async function () { var datas = []; var data = []; for (var i = 0; i < result.rows.length; i++) { /* 处理数据为上述格式 / data.push(result.rows[i]); } datas.push(data); //获得Excel模板的buffer对象 const exlBuf = await readFileAsync('./public/uploadFile/template/issue.xlsx'); //用数据源(对象)data渲染Excel模板 const exlBuf2 = await ejsexcel.renderExcel(exlBuf, datas); await writeFileAsync('./public/uploadFile/temporaryFile/' + meet_name + '_议题报表.xlsx', exlBuf2); setTimeout(() => { console.info("删除议题"); try { fs.access('./public/uploadFile/temporaryFile/' + meet_name + '_xxx.xlsx', fs.constants.F_OK, (err) => { if (!err) { fs.unlinkSync('./public/uploadFile/temporaryFile/' + meet_name + '_xxx.xlsx') } }); } catch (e) { console.info("异常"); console.error(e); } }, 5 60 1000); //返回生成的表格路径提供下载 res.send('/uploadFile/temporaryFile/' + meet_name + '_xxx.xlsx'); })(); } }); }); } catch (error) { //返回异常 res.send("err"); } }); 注:在任何时候,代码出现问题不要捉急,看一下错误提示是否是哪个模块没加,或者是引号问题等等,总之 新中越毛躁,解决问题所花费的时间越多
|