node.js后台生成xlsx文件

前言:对于一个后台管理系统而言,可视化展现数据是必不可少的一部分,而将这些数据导出为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');

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


node.js后台生成xlsx文件_第1张图片
测试excel.png

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

你可能感兴趣的:(node.js后台生成xlsx文件)