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

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

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

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>
  1. 使用 produces 设置响应类型和编码为 “application/octet-stream”。
@RequestMapping(value="/down", produces=MediaType.APPLICATION_OCTET_STREAM_VALUE)
  1. 通过使用 SXSSFWorkbook 设置 Excel 表
SXSSFWorkbookworkbook=newSXSSFWorkbook();
//设置表格名称SXSSFSheetsheet=workbook.createSheet("销售榜单");
//设置表格默认宽度30sheet.setDefaultColumnWidth(30);
//设置 sheet 表格的第0行SXSSFRowrow=sheet.createRow(0);
//设置 sheet 表格的第0行第0列的值row.createCell(0).setCellValue("商品名称");
//设置 sheet 表格的第0行第1列的值row.createCell(1).setCellValue("数量");
  1. 设置响应头
//设置响应头response.setHeader("Access-Control-Expose-Headers", "Content-Disposition");
response.setHeader("Content-disposition", "attachment;filename="+URLEncoder.encode(fileName, "UTF-8"));
//filename 为 Excel 文件名称
  1. 获取 response 的输出流,通过输出流将 Excel 输出。
//将 Excel 表输出到输出流OutputStreamout=response.getOutputStream();
workbook.write(out);

样例代码

//1、通过 SXSSFWorkbook 设置 Excel 表//2、设置响应头//3、输出流输出@RequestMapping(value="/down", produces=MediaType.APPLICATION_OCTET_STREAM_VALUE)
publicvoiddownXlsx(HttpServletResponseresponse) {
//设置表名StringfileName="销售榜单.xlsx";
SXSSFWorkbookworkbook=newSXSSFWorkbook();
//设置表格名称SXSSFSheetsheet=workbook.createSheet("销售榜单");
//设置表格默认宽度30sheet.setDefaultColumnWidth(30);
//设置 sheet 表格的第0行SXSSFRowrow=sheet.createRow(0);
//设置 sheet 表格的第0行第0列的值row.createCell(0).setCellValue("商品名称");
//设置 sheet 表格的第0行第1列的值row.createCell(1).setCellValue("数量");
OutputStreamout=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 (Exceptione) {
e.printStackTrace();
    } finally {
workbook.dispose();
try {
if (out!=null)
out.close();
        } catch (IOExceptione) {
e.printStackTrace();
        }
    }
}
目录
相关文章
|
5天前
|
Java 应用服务中间件
SpringBoot获取项目文件的绝对路径和相对路径
SpringBoot获取项目文件的绝对路径和相对路径
40 1
SpringBoot获取项目文件的绝对路径和相对路径
|
6天前
|
存储 easyexcel Java
SpringBoot+EasyExcel轻松实现300万数据快速导出!
本文介绍了在项目开发中使用Apache POI进行数据导入导出的常见问题及解决方案。首先比较了HSSFWorkbook、XSSFWorkbook和SXSSFWorkbook三种传统POI版本的优缺点,然后根据数据量大小推荐了合适的使用场景。接着重点介绍了如何使用EasyExcel处理超百万数据的导入导出,包括分批查询、分批写入Excel、分批插入数据库等技术细节。通过测试,300万数据的导出用时约2分15秒,导入用时约91秒,展示了高效的数据处理能力。最后总结了公司现有做法的不足,并提出了改进方向。
|
7天前
|
JavaScript 前端开发 Java
SpringBoot项目的html页面使用axios进行get post请求
SpringBoot项目的html页面使用axios进行get post请求
25 2
|
7天前
|
前端开发 Java Spring
SpringBoot项目thymeleaf页面支持词条国际化切换
SpringBoot项目thymeleaf页面支持词条国际化切换
27 2
|
7天前
|
JSON Java 数据库
SpringBoot项目使用AOP及自定义注解保存操作日志
SpringBoot项目使用AOP及自定义注解保存操作日志
25 1
|
9天前
|
JavaScript Java 项目管理
Java毕设学习 基于SpringBoot + Vue 的医院管理系统 持续给大家寻找Java毕设学习项目(附源码)
基于SpringBoot + Vue的医院管理系统,涵盖医院、患者、挂号、药物、检查、病床、排班管理和数据分析等功能。开发工具为IDEA和HBuilder X,环境需配置jdk8、Node.js14、MySQL8。文末提供源码下载链接。
|
Java 应用服务中间件 Maven
传统maven项目和现在spring boot项目的区别
Spring Boot:传统 Web 项目与采用 Spring Boot 项目区别
483 0
传统maven项目和现在spring boot项目的区别
|
XML Java 数据库连接
创建springboot项目的基本流程——以宠物类别为例
创建springboot项目的基本流程——以宠物类别为例
152 0
创建springboot项目的基本流程——以宠物类别为例
|
存储 机器学习/深度学习 IDE
SpringBoot 项目与被开发快速迁移|学习笔记
快速学习 SpringBoot 项目与被开发快速迁移
SpringBoot 项目与被开发快速迁移|学习笔记
|
Java Spring
自定义SpringBoot项目的启动Banner
``Banner``是``SpringBoot``框架一个特色的部分,其设计的目的无非就是一个框架的标识,其中包含了版本号、框架名称等内容,既然``SpringBoot``为我们提供了这个模块,它肯定也是可以更换的这也是``Spring``开源框架的设计理念。