nodejs实现 excel报表的导出。

主要涉及技术点如下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


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值