Springboot 前后端分离项目使用 POI 生成并导出 Excel的操作方法

 更新时间:2023年09月28日 16:20:23   作者:I'm Jie  
在做一个 SpringBoot 前后端分离项目的时候,需要将数据存到 Excel中,用户可以下载 Excel,具体实现是采用 Apache 强大的 POI,本文给大家介绍Springboot 前后端分离项目使用 POI 生成并导出 Excel相关知识,感兴趣的朋友一起看看吧

在做一个 SpringBoot 前后端分离项目的时候,需要将数据存到 Excel中,用户可以下载 Excel。具体实现是采用 Apache 强大的 POI。文章最后将源码例出。

8df0d35a91984785ab319909266df5b9

POI API 文档: https://poi.apache.org/apidocs/dev/index.html

步骤

1.导入 POI 的 maven 依赖

<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi</artifactId>
    <version>5.1.0</version>
</dependency>
<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi-ooxml</artifactId>
    <version>5.1.0</version>
</dependency>

2.使用 produces 设置响应类型和编码为 “application/octet-stream”。

@RequestMapping(value = "/down", produces = MediaType.APPLICATION_OCTET_STREAM_VALUE)

3.通过使用 SXSSFWorkbook 设置 Excel 表

SXSSFWorkbook workbook = new SXSSFWorkbook();
//设置表格名称
SXSSFSheet sheet = workbook.createSheet("销售榜单");
//设置表格默认宽度30
sheet.setDefaultColumnWidth(30);
//设置 sheet 表格的第0行
SXSSFRow row = sheet.createRow(0);
//设置 sheet 表格的第0行第0列的值
row.createCell(0).setCellValue("商品名称");
//设置 sheet 表格的第0行第1列的值
row.createCell(1).setCellValue("数量");

4.设置响应头

//设置响应头
response.setHeader("Access-Control-Expose-Headers", "Content-Disposition");
response.setHeader("Content-disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8"));
//filename 为 Excel 文件名称

5.获取 response 的输出流,通过输出流将 Excel 输出。

//将 Excel 表输出到输出流
OutputStream out = response.getOutputStream();
workbook.write(out);

样例代码

//1、通过 SXSSFWorkbook 设置 Excel 表
//2、设置响应头
//3、输出流输出
@RequestMapping(value = "/down", produces = MediaType.APPLICATION_OCTET_STREAM_VALUE)
public void downXlsx(HttpServletResponse response) {
    //设置表名
    String fileName = "销售榜单.xlsx";
    SXSSFWorkbook workbook = new SXSSFWorkbook();
    //设置表格名称
    SXSSFSheet sheet = workbook.createSheet("销售榜单");
    //设置表格默认宽度30
    sheet.setDefaultColumnWidth(30);
    //设置 sheet 表格的第0行
    SXSSFRow row = sheet.createRow(0);
    //设置 sheet 表格的第0行第0列的值
    row.createCell(0).setCellValue("商品名称");
    //设置 sheet 表格的第0行第1列的值
    row.createCell(1).setCellValue("数量");
    OutputStream out = null;
    try {
        //设置响应头
        response.setHeader("Access-Control-Expose-Headers", "Content-Disposition");
        response.setHeader("Content-disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8"));
        //将 Excel 表输出到输出流
        out = response.getOutputStream();
        workbook.write(out);
        out.flush();
    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        workbook.dispose();
        try {
            if (out != null)
                out.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

到此这篇关于Springboot 前后端分离项目使用 POI 生成并导出 Excel的文章就介绍到这了,更多相关Springboot 前后端分离项目内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java对接MQTT协议的完整实现示例代码

    Java对接MQTT协议的完整实现示例代码

    MQTT是一个基于客户端-服务器的消息发布/订阅传输协议,MQTT协议是轻量、简单、开放和易于实现的,这些特点使它适用范围非常广泛,这篇文章主要介绍了Java对接MQTT协议的完整实现,需要的朋友可以参考下
    2025-08-08
  • spring中EnvironmentPostProcessor接口的实现

    spring中EnvironmentPostProcessor接口的实现

    EnvironmentPostProcessor是SpringBoot用于动态修改环境配置的接口,本文主要介绍了spring中EnvironmentPostProcessor接口的实现,具有一定的参考价值,感兴趣的可以了解一下
    2025-05-05
  • JAVA 十六进制与字符串的转换

    JAVA 十六进制与字符串的转换

    笔者前几日在开服过程中需要将字符串转化成为16进制的字符串,在网上找到了一些方法尝试之后,均发现存在一个问题-->字符串转为16进制后再转回来,英文正常,中文出现乱码
    2009-05-05
  • SpringBoot整合RabbitMQ实现消息确认机制

    SpringBoot整合RabbitMQ实现消息确认机制

    这篇文章主要介绍了SpringBoot整合RabbitMQ实现消息确认机制,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-08-08
  • Java枚举_动力节点Java学院整理

    Java枚举_动力节点Java学院整理

    enum 的全称为 enumeration, 是 JDK 5 中引入的新特性,存放在 java.lang 包中。这篇文章给大家介绍Java枚举相关知识,需要的的朋友参考下
    2017-04-04
  • Java 中的排序Comparable 与 Comparator 的使用与区别对比解析

    Java 中的排序Comparable 与 Comparator 的使用与区别对比解析

    本文给大家介绍Java中的排序Comparable与Comparator的使用与区别对比,本文结合实例代码给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧
    2025-09-09
  • 使用IDEA打jar包的详细图文教程

    使用IDEA打jar包的详细图文教程

    JAR文件是一种压缩文件,与常见的ZIP压缩文件兼容,被称为JAR包,下面这篇文章主要给大家介绍了关于使用IDEA打jar包的相关资料,文中通过图文介绍的非常详细,需要的朋友可以参考下
    2022-08-08
  • Java实现Treap树的示例代码

    Java实现Treap树的示例代码

    本文主要介绍了Java实现Treap树的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-06-06
  • java获取本地文件的多种方式实现与比较

    java获取本地文件的多种方式实现与比较

    这篇文章主要为大家详细介绍了java获取本地文件的多种方式实现与结果比较,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2023-11-11
  • SpringBoot中application.properties与application.yml区别小结

    SpringBoot中application.properties与application.yml区别小结

    本文主要介绍了SpringBoot中application.properties与application.yml区别小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-10-10

最新评论