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

相关文章

  • Django rest framework使用类视图实现首页API

    Django rest framework使用类视图实现首页API

    这篇文章主要介绍了Django rest framework使用类视图实现首页API,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-08-08
  • 面试题:java中为什么foreach中不允许对元素进行add和remove

    面试题:java中为什么foreach中不允许对元素进行add和remove

    读者遇到了一个比较经典的面试题,也就是标题上说的,为什么 foreach 中不允许对元素进行 add 和 remove,本文就详细的介绍一下,感兴趣的可以了解一下
    2021-10-10
  • Java自定义类加载器实现类隔离详解

    Java自定义类加载器实现类隔离详解

    由于每种组件的不同版本所依赖的jar包不同,我们可以借鉴tomcat的实现方式,通过自定义类加载器打破双亲委派机制来实现类隔离,从而达到操作多组件多版本的目的。本文就来和大家详细聊聊实现方法
    2023-03-03
  • Go Java算法之简化路径实例详解

    Go Java算法之简化路径实例详解

    这篇文章主要为大家介绍了Go Java算法之简化路径实例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-09-09
  • 在MyBatis的XML映射文件中<trim>元素所有场景下的完整使用示例代码

    在MyBatis的XML映射文件中<trim>元素所有场景下的完整使用示例代码

    在MyBatis的XML映射文件中,<trim>元素用于动态添加SQL语句的一部分,处理前缀、后缀及多余的逗号或连接符,示例展示了如何在UPDATE、SELECT、INSERT和SQL片段中使用<trim>元素,以实现动态的SQL构建,感兴趣的朋友一起看看吧
    2025-01-01
  • SpringBoot实现图形验证码的操作方法

    SpringBoot实现图形验证码的操作方法

    随着安全性的要求越来越高,目前许多项目中都使用了验证码,验证码也有各种类型,如 图形验证码、短信验证码、邮件验证码、人脸识别等,本文给大家介绍SpringBoot实现图形验证码的方法,感兴趣的朋友跟随小编一起看看吧
    2024-07-07
  • 全面详解java代码重构与设计模式

    全面详解java代码重构与设计模式

    这篇文章主要为大家介绍了全面详解java代码重构与设计模式的全面详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-06-06
  • ConcurrentMap.putIfAbsent(key,value)用法实例

    ConcurrentMap.putIfAbsent(key,value)用法实例

    这篇文章主要介绍了ConcurrentMap.putIfAbsent(key,value)用法实例,分享了相关代码示例,小编觉得还是挺不错的,具有一定借鉴价值,需要的朋友可以参考下
    2018-02-02
  • Spring @Value如何通过${}、#{}注入不同类型的值

    Spring @Value如何通过${}、#{}注入不同类型的值

    这篇文章主要介绍了Spring @Value如何通过${}、#{}注入不同类型的值问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-05-05
  • spring cloud gateway请求跨域问题解决方案

    spring cloud gateway请求跨域问题解决方案

    这篇文章主要介绍了spring cloud gateway请求跨域问题解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-01-01

最新评论