node.js根据指定数据生成excel表格并响应客户端下载

前言

基于对对数据库信息导出为excel表格供用户下载的需要,本文大致介绍一个node.js中一个强大的excel表格解析模块node-xlsx。其中express是一个强大的web服务器框架这里就不做过多介绍了。

安装模块

表格生成模块

npm install node-xlsx

web服务器器框架模块

npm install express

搭建一个服务器监听请求

// 导入服务器模块
const express = require('express');

// 创建服务器对象
const app = express();

// 绑定路由
app.get('/getExcel', (req,res)=>{
    // 路由处理函数
})

// 启动服务器,监听85端口
app.listen(85, () => {
    console.log('服务器启动成功!')
})

生成表格的主体函数

// 导入excel生成模块
const xlsx = require("node-xlsx");

const list = [{
name: "sheet",
data: [
    ["data1", "data2", "data3"],
    ["data1", "data2", "data3"],
    ["data1", "data2", "data3"],
],
}, ];

// 得到一个表格文件流
const buffer = xlsx.build(list);

其中list为需要生成的表格数据,name是表格溥名
buffer是一个文件流,若想要将表格保存到本地可使用fs模块的写入文件方法,将buffer做为写入文件的内容即可保存到本地。

设置响应头

声明这是一个需要下载的文件

res.set({
    'Content-Type': 'application/octet-stream', // 告诉浏览器这是一个二进制文件
    'Content-Disposition': 'attachment; filename=Asnull.xlsx' // 告诉浏览器这是一个需要下载的文件并且文件名为Asnull.xlsx
});

响应客户端请求

res.send(buffer)

整体代码

// 导入服务器模块
const express = require('express');
// 导入excel生成模块
const xlsx = require("node-xlsx");

// 创建服务器对象
const app = express();

// 绑定路由
app.get('/getExcel', (req, res) => {
    // 路由处理函数

    // 表格数据
    const list = [{
        name: "Asnull",
        data: [
            ["data1", "data2", "data3"],
            ["data1", "data2", "data3"],
            ["data1", "data2", "data3"],
        ],
    }, ];

    // 得到一个表格文件流
    const buffer = xlsx.build(list);

    res.set({
        'Content-Type': 'application/octet-stream', // 告诉浏览器这是一个二进制文件
        'Content-Disposition': 'attachment; filename=Asnull.xlsx' // 告诉浏览器这是一个需要下载的文件并且文件名为Asnull.xlsx
    });

    // 响应客户端请求进行下载
    res.send(buffer)

})

// 启动服务器,监听85端口
app.listen(85, () => {
    console.log('服务器启动成功!')
})

我们访问监听的地址http://localhost:85/getExcel,即可调起下载,效果如下
202276134713.png

上面代码中的list是需要导出的数据源

list是一个数组包含着对象,list的每一个元素都会成为excel表格的一个sheet,name就是sheet的标题,data的结构是一个二维数组,所以在导出数据之前需要对导出数据进行处理,化成二维数组的形式。
如果想要导出一个表格多个sheet,list可以这样写

const list = [
  {
    name: "sheet1",
    data: [
      ["data1", "data2", "data3"],
      ["data1", "data2", "data3"],
      ["data1", "data2", "data3"],
    ],
  },
  {
    name: "sheet2",
    data: [
      ["data1", "data2", "data3"],
      ["data1", "data2", "data3"],
      ["data1", "data2", "data3"],
    ],
  },
  {
    name: "sheet3",
    data: [
      ["data1", "data2", "data3"],
      ["data1", "data2", "data3"],
      ["data1", "data2", "data3"],
    ],
  },
];

202276134942.png

参考:

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值