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 前后端分离项目内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 使用spring-cache一行代码解决缓存击穿问题

    使用spring-cache一行代码解决缓存击穿问题

    本文主要介绍了使用spring-cache一行代码解决缓存击穿问题,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-04-04
  • SpringBoot实现发送电子邮件

    SpringBoot实现发送电子邮件

    这篇文章主要介绍了SpringBoot实现发送电子邮件,电子邮件是—种用电子手段提供信息交换的通信方式,是互联网应用最广的服务。通过网络的电子邮件系统,用户可以非常快速的方式,与世界上任何一个角落的网络用户联系,下面就来看看SpringBoot如何实现发送电子邮件吧
    2022-01-01
  • java基础--自己动手实现一个LRU

    java基础--自己动手实现一个LRU

    这篇文章主要介绍了运用方案如何实现LUR,文章中通过代码讲解的非常详细,对大家的工作或学习有一定的参考价值,感兴趣的朋友可以参考一下
    2021-08-08
  • JMeter参数化4种实现方式(小结)

    JMeter参数化4种实现方式(小结)

    参数化是自动化测试脚本的一种常用技巧,可将脚本中的某些输入使用参数来代替,JMeter提供了多种参数化方式,下面就其中常用的4种展开阐述,感兴趣的可以来了解一下
    2021-12-12
  • Guava范围类Range方法实例深入解析

    Guava范围类Range方法实例深入解析

    这篇文章主要为大家介绍了Guava范围类Range方法实例深入解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-12-12
  • Spring AOP中的JDK和CGLib动态代理哪个效率更高?

    Spring AOP中的JDK和CGLib动态代理哪个效率更高?

    今天小编就为大家分享一篇关于Spring AOP中的JDK和CGLib动态代理哪个效率更高?,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-03-03
  • java Object wait方法详细介绍

    java Object wait方法详细介绍

    这篇文章主要介绍了java Object wait方法详细介绍的相关资料,需要的朋友可以参考下
    2017-02-02
  • java实现邮件发送详解

    java实现邮件发送详解

    这篇文章主要为大家详细介绍了java实现邮件发送示例,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-03-03
  • 如何在 Java 中实现一个 redis 缓存服务

    如何在 Java 中实现一个 redis 缓存服务

    为什么要使用缓存?说到底是为了提高系统的运行速度。将用户频繁访问的内容存放在离用户最近,访问速度最快的地方,提高用户的响应速度。下面我们来一起深入学习一下吧
    2019-06-06
  • springboot 实现记录业务日志和异常业务日志的操作

    springboot 实现记录业务日志和异常业务日志的操作

    这篇文章主要介绍了springboot 实现记录业务日志和异常业务日志的操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-07-07

最新评论