美文网首页
node.js后台生成xlsx文件

node.js后台生成xlsx文件

作者: yaya520 | 来源:发表于2017-11-08 18:15 被阅读0次

    前言:对于一个后台管理系统而言,可视化展现数据是必不可少的一部分,而将这些数据导出为Excel可打开的文件的需求可很常见,如果前端把所有数据一次性拿到的话,这个需求可以在前端完成,但是对于做了分页处理的后台管理系统而言,前端并不是一次性拿到所有数据,而这时需要一次性导出所有表格数据(包括还没有加载到前端的数据),那么肯定是后台操作比较好。
    exceljs
    直接上代码,还是很好懂的。测试数据:

    let data = [{
        id: 1,
        name: '张三',
        birth: new Date(1994,2,14)
    },{
        id: 2,
        name: '李四',
        birth: new Date(1995,8,24)
    },{
        id: 3,
        name: '王五',
        birth: new Date(1991,10,10)
    },{
        id: 4,
        name: '周六',
        birth: new Date(1992,7,1)
    }];
    

    node.js代码:

    const Excel = require('exceljs');
    const http = require('http');
    const url = require('url');
    
    http.createServer( async (req, res) => {
        if(req.method == 'GET' && req.url == '/xlsx') {
            res.writeHead(200, {
                "Content-Type": "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", //xlsx 文件制定类型
                "Access_Control-Allow-Origin": "*",
                "Content-Disposition": "attachment; filename=" + new Buffer('测试excel.xlsx').toString('binary'),  // 设置文件名称
            });
            try {
                const workbook = new Excel.Workbook();  // 创建一个Workbook对象
                const worksheet = workbook.addWorksheet('My Sheet');  // 创建一个worksheet并命名
                worksheet.columns = [  // 设置列表属性
                    { header: '编号', key: 'id', width: 8 },
                    { header: '姓名', key: 'name', width: 12 },
                    { header: '生日', key: 'birth', width: 25 },
                    { header: '隐藏列', key: 'hidden', width: 20 }
                ];
                // 行、列均从1开始计数,header作为第一行数据
                worksheet.addRows(data);  // 写入json数组数据
                worksheet.addRow([5,'朱八',new Date(1999,9,6), 12345]);  // 单独添加一行数据
    
                const hiddenCol = worksheet.getColumn('hidden');  // 获取列
                hiddenCol.hidden = true;  // 隐藏列
    
                const row5 = worksheet.getRow(5);  // 获取第5行
                row5.height = 50;  // 设置第5行的高度
    
                await workbook.xlsx.write(res);  // 写入数据
                res.end();
            } catch(error) {
                console.log(error);
                res.end('error');
            }
        }
    }).listen(8000,'127.0.0.1');
    

    可以看到能够很方便的设置宽高,是否隐藏等属性,操作数据库也挺自然,下图是最后的效果:


    测试excel.png

    除此之外,exceljs对于某行,某列,某个具体的单元格都可以灵活的设置其样式(是否加粗,宽高,边距,颜色等等)或者统计行列,合并单元格等等,是非常优秀的一个库。

    相关文章

      网友评论

          本文标题:node.js后台生成xlsx文件

          本文链接:https://www.haomeiwen.com/subject/lrsemxtx.html