关于express:express中使用nodexlsx插件下载excel表格

60次阅读

共计 2098 个字符,预计需要花费 6 分钟才能阅读完成。

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 = [
    // 第一个 sheet 内容
    {
      name:"我是 sheet1", // 给第一个 sheet 指名字 
      data:[  // 留神,这里是一个二维数组
        ["姓名","年龄","他乡","备注"], // 第一行
        ["孙悟空","500","花果山","人送外号斗战败佛"], // 第二行
        ["猪八戒","88","高老庄","天蓬元帅"], // 第三行
      ]
    },
    // 第二个 sheet 内容
    {
      name:"我是 sheet2", // 给第二个 sheet 指名字 
      data:[["城市","国家","人口","经济程度"], // 同上
        ["上海","中国","14 亿","越来越好"],
        ["伦敦","英国","7000 万","还行"],
        ["华盛顿","美国","3.4 亿","凑活"]
      ]
    }
  ]

上述数据格式对应效果图


很显然,数据结构和对应导出的 excel 后果都是对应的

状况二、依据前端传递参数,查问 mysql 数据并返回前端流文件

这种状况实用于,一次性的表格文件下载。不会占用后端磁盘文件。就是接管前端传递来的参数,而后把参数拼接 sql 语句。最终把数据结构组装成 node-xlsx 插件须要的数据格式即可

// excel 导出下载模板接口
route.post("/exportExcel", (req, res) => {
  // 假如咱们 mysql 数据库查问失去了 excelData 这个数据后果
  let excelData = [
    // 第一个 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))
})

总结

本文记录的次要是后端方面的代码写法,至于前端的下载 excel 表格的写法和注意事项常见问题,能够参考我的另外一篇文章,传送门如下:https://segmentfault.com/a/11…

最初附上 npmjs 官方网站的文档实例介绍,更加齐全哟:https://www.npmjs.com/package…

正文完
 0