express中使用node-xlsx插件下载excel表格

node-xlsx是一个轻量级的excel插件,下载导出excel基本的功能这个插件都能实现,本文记录一下express框架中使用node-xlsx插件下载excel表格的步骤。
情况一、读取本地文件并返回前端excel流文件
这种情况适用于下载excel模板场景,毕竟模板是固定的内容,我们在代码的文件夹中存放一个固定的excel模板,读取并返回即可。
  • 第一步,肯定是要下载安装这个插件npm i node-xlsx
  • 第二步,在对应代码中引入这个插件const xlsx = require('node-xlsx')
  • 第三步,就是在对应的路由url中写对应代码,代码如下:
// excel导出下载模板接口 route.get("/exportExcel", (req, res) => {// 首先,读取本地excel模板文件,并解析成node-xlsx插件需要的数据格式, // (比如我的表格文件在代码中的excel文件夹下)要引入fs文件模块才能读取哦 const dataByParse = xlsx.parse(fs.readFileSync('./excel/统计模板.xlsx')); /* 打印出来的数据是一个数组,数组中的每一项(每一个对象)都是一个sheet数据,name属性指定的是每一个sheet的名字 data属性是一个数组,数组中存放的是表格对应每个sheet的数据,data数组中的第一项是“表头”的数据,也可以理解为是 第一行的数据,后面的每一项就是对应每一行“表体”的数据,具体格式,后续也会举例。 */ console.log("解析数据格式",dataByParse); // 最后一步,使用xlsx插件自带的build方法将解析后的数据转换成为excel表格(buffer形式的流文件) // 以流文件的形式返回给前端,前端接收解析下载即可 res.send(xlsx.build(dataByParse))})

node-xlsx需要的数据格式举例子
比如这样的数据格式,我们看一下数据结构
let excelData = https://www.it610.com/article/[ // 第一个sheet内容 { name:"我是sheet1", // 给第一个sheet指名字 data:[// 注意,这里是一个二维数组 ["姓名","年龄","家乡","备注"], // 第一行 ["孙悟空","500","花果山","人送外号斗战胜佛"], // 第二行 ["猪八戒","88","高老庄","天蓬元帅"], // 第三行 ] }, // 第二个sheet内容 { name:"我是sheet2", // 给第二个sheet指名字 data:[ ["城市","国家","人口","经济水平"], // 同上 ["上海","中国","14亿","越来越好"], ["伦敦","英国","7000万","还行"], ["华盛顿","美国","3.4亿","凑活"] ] } ]

上述数据格式对应效果图
express中使用node-xlsx插件下载excel表格
文章图片

很显然,数据结构和对应导出的excel结果都是对应的
情况二、根据前端传递参数,查询mysql数据并返回前端流文件
这种情况适用于,一次性的表格文件下载。不会占用后端磁盘文件。就是接收前端传递来的参数,然后把参数拼接sql语句。最终把数据结构组装成node-xlsx插件需要的数据格式即可
// excel导出下载模板接口 route.post("/exportExcel", (req, res) => { // 假设我们mysql数据库查询得到了excelData这个数据结果 let excelData = https://www.it610.com/article/[ // 第一个sheet内容 { name:"我是sheet1", // 给第一个sheet指名字 data: [ ["姓名", "年龄", "家乡", "备注"], // 第一行 ["孙悟空", "500", "花果山", "人送外号斗战胜佛"], // 第二行 ["猪八戒", "88", "高老庄", "天蓬元帅"], // 第三行 ] }, // 第二个sheet内容 { name: "我是sheet2", // 给第二个sheet指名字 data: [ ["城市", "国家", "人口", "经济水平"], // 同上 ["上海", "中国", "14亿", "越来越好"], ["伦敦", "英国", "7000万", "还行"], ["华盛顿", "美国", "3.4亿", "凑活"] ] } ]// excel表格内容配置单元格宽度 let optionArr = { // 指定sheet1相应宽度 "!cols": [ { wch: 15 }, { wch: 15 }, { wch: 10 }, { wch: 50 }, ], // 指定sheet2相应宽度 "cols": [ { wch: 15 }, { wch: 15 }, { wch: 10 }, { wch: 50 }, ], }// xlsx.build方法第二个参数接收的是单元格的配置参数 res.send(xlsx.build(excelData,optionArr)) })

总结 【express中使用node-xlsx插件下载excel表格】本文记录的主要是后端方面的代码写法,至于前端的下载excel表格的写法和注意事项常见问题,可以参考我的另外一篇文章,传送门如下:https://segmentfault.com/a/11...
最后附上npmjs官方网站的文档实例介绍,更加齐全哟: https://www.npmjs.com/package...

    推荐阅读