NodeJs+Vue+MongoDB后台管理系统模板(5)数据生成Excel并导出

将数据生成Excel并导出是后台管理系统常备的功能,但是之前还没有尝试过通过NodeJs去实现,这一次在网上去搜索了具体的实现方法,从中了解到了一个node-xlsx的node模块,在npm的官网上了解了相关的使用方法。

const xlsx = require('node-xlsx');

在具体操作的时候,生成excel时需要的数据是数组值类型数组,[[1,2,3],[1,2,3],[1,2,3],[1,2,3]],应该可以看懂什么意思,这样的数据生成的是四行每行三列,数据为每行都是1,2,3的文件,在这之前需要先在数组里添加一个标题的数组,然后遍历查询的数据进行追加,可以通过options来定义列宽,但再设置其他的样式,就需要引入一个全新的库了,通过xlsx.的buide方法进行数据的转换,最后再调用fswriteFile方法去生成文件,最后返回数据的时候只需要返回文件所在的位置即可。

//下载所有用户信息
router.get('/download',(req,res)=>{
    DB.find('user',{},(err,user)=>{
        if(err){
            res.send({
                code : 0 ,
                msg : '下载失败'
            });
        }
        const DATA = [['用户名','用户密码','年龄','性别','生日',
                        '头像地址','家乡','手机号','QQ']];
        user.forEach((node)=>{
            const Arr = [
                node.UserName, node.PassWorld, node.Age,
                node.Gender==='male'?'男':'女', node.Birthday, node.Picture,
                node.Hometown, node.Phone, node.QQ
            ];
            DATA.push(Arr)
        });
        const options = {'!cols': [{wch:11},{wch:14},{wch:8},{wch:6},{wch:13},
                        {wch:50},{wch:16},{wch:15},{wch:13}]};
        const buffer = xlsx.build([{name: "所有用户信息表", data: DATA}],options);
        fs.writeFile('./public/download/user.xlsx',buffer,(err)=>{
            if(err){
                res.send({
                    code : 0 ,
                    msg : '下载失败'
                });
            }
            res.send({
                code:1,
                file: 'http://' + req.headers.host + '/download/user.xlsx'
            })
        });
    })
});

在前台的处理更是简单方便,直接跳转文件地址就可以完成下载

const result = await reqUserDownload();
if(result.code === 1){
    window.location.href = result.file;
}

我这次的做法比较粗糙,因为是导出的所有用户的数据,其实通过传递每页的数据量数和当前页数,就可以打印当前页的数据,或者打印指定条数的数据,仅供参考。

最后想要完整代码的,欢迎访问我的GitHub,最好来个Star,哈哈。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章