主要涉及技术点如下nodejs+ejs+express+mysql+node-xlsl模块。为了方便大家阅读,我特地在代码里写了详细注释 再上传
在之前需要npm install 安装所需要的模块别忘了哦。不啰嗦了直接上图
sql脚本如下CREATE TABLE `doctor_user` (
`uuid` varchar(32) NOT NULL,
`basicId` varchar(32) DEFAULT NULL,
`phone` varchar(45) DEFAULT NULL,
`star` varchar(45) DEFAULT NULL COMMENT '用户星级',
`createTime` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
`isexport` int(2) DEFAULT NULL COMMENT '0未导出1已导出',
PRIMARY KEY (`uuid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-------------------
/** * 报表导出 * @type {string} */ var selExSql = ' SELECT phone,isexport,createTime,uuid FROM doctor_user WHERE createTime between ? and ? order by createTime' var updateIsexport = 'UPDATE doctor_user SET isexport = 1 WHERE uuid =?' servers.push({ type: 'post', url: '/doctorUser/exports', role: ['M'], fun: function (req, res) { var data = {} var start = req.body.start_time + ' 00:00:00'//接收开始时间参数 var end = req.body.end_time + ' 23:59:59'//接收结束时间参数 var newUuid = new Array(); var sellength; db.exe(selExSql, [start, end], function (rs) {//selExSql这句是查找出 需要导出的内容,uuid是需要将导出的数据更新为已导出的条件下面有操作 if (rs && rs.length > 0) { sellength = rs.length; data = JSON.stringify(rs) var list = execlone(data, ['手机号', '是否已导出', '创建时间']);//execlone对应下面的execlone方法//这三个字段对应excel的导出字段 var buffer = xlsx.build([{name: "SheetName", data: list}]);//导出内容 res.writeHead(200, { 'Content-Type': 'application/x-excel', 'Content-Disposition': 'attachment;filename=' + req.body.start_time + '----' + req.body.end_time + '.xlsx' }); res.write(buffer.toString('binary'), "binary"); res.end(); var i = 0; var f = [] rs.forEach(function (l, i) {//这里执行的是将导出后的更新为已导出 f.push(function (dc) { db.exe(updateIsexport, [l.uuid], function (rs) {//更新这块可以不管。因为是我们封装的工具 if (rs && rs.affectedRows > 0) { dc.finish() } }) }) }) var done = function () { } multiEventService.run(f, done)//multiEventService是公司自己的封装的可以不同看他。 } else { res.send('没有数据可导出') } }) } }); function execlone(data, topdata) { var list = []; list.push(topdata); data = JSON.parse(data);//这里的data对应上面的data = JSON.stringify(rs)然后将其遍历出需要导出的字段 data.forEach(function (l) { var n = [l.phone, l.isexport == 0 ? '未导出' : '已导出', l.createTime];//遍历出需要导出的字段 list.push(n);//放如数组 }); return list; }--------------
。
-----------------------------------------------------------------------
代码下载地址http://download.csdn.net/detail/qq_30145523/9689496