Springboot 前后端分离项目使用 POI 生成并导出 Excel

news/2024/7/21 3:51:44 标签: excel, spring boot, java

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

8df0d35a91984785ab319909266df5b9

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

步骤

  1. 导入 POI 的 maven 依赖

    java"><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”。

    java">@RequestMapping(value = "/down", produces = MediaType.APPLICATION_OCTET_STREAM_VALUE)
    
  3. 通过使用 SXSSFWorkbook 设置 Excel 表

    java">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. 设置响应头

    java">//设置响应头
    response.setHeader("Access-Control-Expose-Headers", "Content-Disposition");
    response.setHeader("Content-disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8"));
    //filename 为 Excel 文件名称
    
  5. 获取 response 的输出流,通过输出流将 Excel 输出。

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

样例代码

java">//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();
        }
    }

}

http://www.niftyadmin.cn/n/131817.html

相关文章

关于Hanoi塔的实现

关于Hanoi塔的实现 首先&#xff0c;在此之前&#xff0c;我们需要了解一下递归这个东西&#xff1b; 在我看来&#xff0c;递归这个东西就是栈的进出&#xff1b; 向下&#xff1a;进栈回溯&#xff1a;出栈 在进栈之前标记状态&#xff0c;输入到栈中&#xff1b; #incl…

MQTT协议-CONNECT报文介绍

MQTT协议-CONNECT报文介绍 参考MQTT协议中文笔记&#xff1a;https://mcxiaoke.gitbooks.io/mqtt-cn/content/mqtt/01-Introduction.html Connect报文主要用于客户端连接服务器的&#xff0c;未涉及具体数据的传输&#xff0c;可以使用网络调试助手来连接阿里云平台&#xff…

SpringBoot整合Quartz以及异步调用

文章目录前言一、异步方法调用1、导入依赖2、创建异步执行任务线程池3、创建业务层接口和实现类4、创建业务层接口和实现类二、测试定时任务1.导入依赖2.编写测试类&#xff0c;开启扫描定时任务3.测试三、实现定时发送邮件案例1.邮箱开启IMAP服务2.导入依赖3.导入EmailUtil4.编…

Uniapp 反编译成原始代码遇到问题总结-wxml篇

有一次客户把uniapp的源码给丢了&#xff0c;只剩下编译后的小程序&#xff0c;只剩下编译后的代码&#xff0c;客户想要二开&#xff0c;但是又不想多花钱去重写一遍前端代码&#xff0c;就问我能不能反编译一下&#xff0c;我当时就拒绝了&#xff0c;怎么可能&#xff1f;但…

C语言:如何在cmd命令窗口上玩贪吃蛇游戏

最近在重新学习C语言知识,还别说,在这个过程中,我还真的学到了过去很多没有学习到C语言知识,于是就做了这个游戏–贪吃蛇. 运行结果如下: C语言:如何在cmd命令窗口上玩贪吃蛇游戏 文章目录 1. 实现原理2. 实现过程3. 参考代码1. 实现原理 其实,就是利用了人的视觉错觉来…

一 Go环境搭建

1. 下载地址 https://golang.google.cn/dl/ 傻瓜式安装&#xff0c;自动会配置path的变量&#xff0c;安装完成后可以使用go version 查看当前安装的版本 本文使用目前最新的1.20.2版本 2. 配置go环境 cmd控制栏打开输入以下命令&#xff08;如果cmd有问题可以尝试powershe…

【C++】C++11——简介|列表初始|简化声明|nullptr与范围for|STL中的变化

文章目录一、C11简介二、列表初始化三、简化声明四、nullptr与范围for五、STL中一些变化一、C11简介 在2003年C标准委员会曾经提交了一份技术勘误表(简称TC1)&#xff0c;使得C03这个名字已经取代了C98称为C11之前的最新C标准名称。不过由于TC1主要是对C98标准中的漏洞进行修复…

Android JNI浅析、Java和Native通信对象的传值和回调

简单了解一下jni JNI是一个本地编程接口&#xff0c;它允许运行在Java虚拟机的Java代码与用其他语言&#xff08;如C,C和汇编&#xff09;编写的库交互。 jni函数签名 首先看一下java类型对应的jni类型&#xff1a; Java类型符号BooleanZByteBCharCShortSIntILongJFloatFDo…