当前位置: 首页 > news >正文

SpringBoot如何使用EasyExcel实现表格导出(简洁快速入门版本)

前言

前面给大家介绍了动态表头的导入,这篇文章给大家介绍如何实现导出

前面给大家介绍了动态表头的导入,我们了解了如何通过EasyExcel灵活地读取结构不固定的Excel文件。这次,我们将目光转向数据导出——即如何将数据以Excel文件的形式输出给用户。这在很多应用场景中都非常有用,比如报表生成、数据备份和迁移等。下面我将详细讲解如何在Spring Boot应用中使用EasyExcel来实现数据的导出功能。

首先先上EasyExcel的官网:EasyExcel官方文档 - 基于Java的Excel处理工具 | Easy Excel 官网

1. 添加依赖

        首先,我们需要确保项目中已经包含了EasyExcel的依赖。如果你还没有添加,请打开pom.xml文件,并加入以下Maven依赖:

<dependency><groupId>com.alibaba.easyexcel</groupId><artifactId>easyexcel</artifactId><version>2.2.3</version>
</dependency>

请根据你的项目需求选择合适的版本号,通常建议使用最新稳定版。

 2.实现

controller层

        在Controller层中,我们定义了一个处理导出请求的API端点。该方法接收一个HTTP POST请求,并根据传入的参数(DataFromVo)调用服务层的方法来执行具体的导出逻辑。

/*** 导出检查计划数据* @author zqx* @date 2023/12/6 17:48*/
@RestController
@RequestMapping("/inspection")
public class InspectionPlanController {@Autowiredprivate SiteInspectPlanHomeService siteInspectPlanHomeService;/*** 导出检查计划信息为Excel文件。** @param request  HTTP请求对象,用于获取请求信息。* @param response HTTP响应对象,用于设置响应头和写出文件流。* @param dataFromVo 包含查询条件的数据传输对象。*/@PostMapping("/exportInspectionPlan")@ApiOperation(value = "导出检查计划信息", notes = "将检查计划信息导出为Excel文件")public void exportInspectionPlan(HttpServletRequest request, HttpServletResponse response, @RequestBody DataFromVo dataFromVo) {log.info("执行了POST请求");log.info("参数:{}", dataFromVo);siteInspectPlanHomeService.exportInspectionPlan(request, response, dataFromVo);}
}

创建实体类

        为了使EasyExcel能够正确地映射Java对象到Excel表格中的列,我们需要创建一个与Excel结构相匹配的实体类。这里我们使用ExportPlanInformationVo作为示例。

/*** 导出信息对象* @Author zqx* @Date 2023/12/6 9:26*/
@Data
@HeadRowHeight(30) // 设置头部行高
@ContentRowHeight(25) // 设置内容行高
@ColumnWidth(20) // 设置列宽
@HeadFontStyle(fontName = "宋体", fontHeightInPoints = 11)
public class ExportPlanInformationVo implements Serializable {@ApiModelProperty("名称")@ExcelProperty("名称")private String planName;@ApiModelProperty("类型")@Dict(code = "inspectionType", fieldName = "inspectionTypeName")@ExcelProperty("类型")private String inspectionType;@ApiModelProperty("主题名称")@ExcelProperty("主题")private String themeName;@ApiModelProperty("计划起止时间")@ExcelProperty("计划起止时间")private String startEndTime;@ApiModelProperty("年度")@ExcelProperty("年度")private String inspectionYear;@ApiModelProperty("单位数量")@ExcelProperty("单位数量")private String orgNoCount;@ApiModelProperty("户数")@ExcelProperty("户数")private String taskNum;@ApiModelProperty("已完成户数")@ExcelProperty("已完成户数")private String completedNumber;@ApiModelProperty("完成率")@ExcelProperty("完成率")private String inspectionCompletionRate;@ApiModelProperty("超期状态")@ExcelProperty("超期状态")private String isItOverdue;@ApiModelProperty("状态")@Dict(code = "planStatus", fieldName = "planStatusName")@ExcelProperty("状态")private String planStatus;@ApiModelProperty("创建时间")@ExcelProperty("创建时间")private String createTime;@ApiModelProperty("结束日期")@ExcelIgnore // 忽略此字段不输出到Excel中private String endTime;
}

Service 层

        在Service层中,我们将具体实现导出逻辑。这个例子展示了如何准备要导出的数据,并通过EasyExcel库将其写入HTTP响应流中,以便用户可以下载生成的Excel文件。

@Service
public class SiteInspectPlanHomeService {/*** 导出检查计划信息为Excel文件。** @param request  HTTP请求对象,用于获取请求信息。* @param response HTTP响应对象,用于设置响应头和写出文件流。* @param dataFromVo 包含查询条件的数据传输对象。*/@Overridepublic void exportInspectionPlan(HttpServletRequest request, HttpServletResponse response, DataFromVo dataFromVo) {try {// 根据业务需求处理dataFromVo并获取要导出的数据列表List<ExportPlanInformationVo> planVos = prepareDataForExport(dataFromVo);// 给文件命名String fileName = "现场巡视计划报表";// 设置响应内容类型为Excel格式,并编码防止中文乱码问题response.setContentType("application/vnd.ms-excel");response.setCharacterEncoding("UTF-8");// 设置文件名并处理URL编码fileName = URLEncoder.encode(fileName, "UTF-8").replaceAll("\\+", "%20");// 文件下载方式(附件下载还是在当前浏览器打开)response.setHeader("Content-disposition", "attachment;filename=" + fileName + ".xlsx");// 使用EasyExcel进行数据写入操作EasyExcel.write(response.getOutputStream(), ExportPlanInformationVo.class).sheet("现场巡视计划报表") // 指定工作表名称.doWrite(planVos); // 写入数据到Excel文件} catch (Exception e) {log.error("导出过程中出现错误 {}", e);throw new RuntimeException("导出失败,请稍后再试!");}}/*** 准备要导出的数据。** @param dataFromVo 查询条件* @return 要导出的数据列表*/private List<ExportPlanInformationVo> prepareDataForExport(DataFromVo dataFromVo) {// 这里需要根据你的业务逻辑去查询数据库或其它数据源,并转换成ExportPlanInformationVo列表// 示例代码:List<ExportPlanInformationVo> planVos = new ArrayList<>();// 填充数据...return planVos;}
}

        最后 

        上述代码段详细描述了如何在Spring Boot应用程序中集成EasyExcel以实现检查计划信息的导出功能。每个部分都包含了必要的注释和说明,确保开发者能够理解每一行代码的作用以及整个流程的工作原理。此外,还特别注意了对异常情况的处理,保证即使发生错误也能够给出适当的反馈信息。

相关文章:

SpringBoot如何使用EasyExcel实现表格导出(简洁快速入门版本)

前言 前面给大家介绍了动态表头的导入&#xff0c;这篇文章给大家介绍如何实现导出 前面给大家介绍了动态表头的导入&#xff0c;我们了解了如何通过EasyExcel灵活地读取结构不固定的Excel文件。这次&#xff0c;我们将目光转向数据导出——即如何将数据以Excel文件的形式输出…...

多种平台上安装部署调试Open5GS(四)

OpenWRT 源码安装 UERANSIM 安装依赖openwrt源码安装cmake其他依赖准备UERANSIM安装测试验证Open5GS 是一个功能完善的开源5G项目,具备5G、4G核心网功能,最新代码支持R17标准, 本系列文章介绍Open5GS在x86、ARM平台上的安装部署方法,并通过搭建UERANSIN、商用5G基站和终端两…...

单片机的基本构成与工作原理

单片机&#xff0c;即微控制器&#xff08;Microcontroller Unit&#xff0c;MCU&#xff09;&#xff0c;是一种将中央处理器(CPU)、存储器(ROM/RAM)、定时/计数器(Timer/Counter)、中断系统、输入输出(I/O)接口等集成在一块芯片上的微型计算机。它具有体积小、功耗低、成本低…...

opencv常用图像处理操作

OpenCV 处理图像的通用流程通常包括以下几个步骤&#xff0c;根据具体需求可以调整或跳过某些步骤。以下是一个通用的框架&#xff1a; 读取图像 加载图像文件到内存中以进行后续处理。 import cv2 读取图像 image cv2.imread(‘image.jpg’) # 彩色图像 gray_image cv2…...

Svn如何切换删除账号

记录Svn清除切换账号 1.首先打开小乌龟的设置如下图 打开设置后单击已保存数据&#xff0c;然后选择清除 接上图选择清除后&#xff0c;就可以打勾选择清除已保存的账号&#xff0c;我们再次检出的就可以切换账号了 &#x1f449;总结 本次记录Svn清除切换账号 如能帮助到你…...

使用PaddleOCR遇到的问题Bug

Q1: 训练模型的预测效果比inference模型的预测效果差距很大,怎么办?原因是什么? A1: 训练模型:使用训练数据集进行训练后的模型。 inference模型:把模型结构和模型参数保存在文件中的固化模型,多用于预测部署场景。训练过程中保存的模型是checkpoints模型,保存的只有模…...

了解Xcode在iOS开发中的作用和功能有哪些

Xcode是什么&#xff1f;它在iOS开发中的作用和功能有哪些&#xff1f; 一、Xcode是什么&#xff1f; Xcode是苹果公司针对macOS平台开发的一款集成开发环境&#xff08;Integrated Development Environment&#xff0c;简称IDE&#xff09;。它主要用于开发iOS、iPadOS、mac…...

《船舶物资与市场》是什么级别的期刊?是正规期刊吗?能评职称吗?

问题解答 问&#xff1a;《船舶物资与市场》是不是核心期刊&#xff1f; 答&#xff1a;不是&#xff0c;是知网收录的正规学术期刊。 问&#xff1a;《船舶物资与市场》级别&#xff1f; 答&#xff1a;国家级。主管单位&#xff1a;中国船舶集团有限公司 主办单…...

商汤完成组织架构调整,改革完成的商汤未来何在?

首先&#xff0c;从核心业务的角度来看&#xff0c;商汤科技通过新架构明确了以AI云、通用视觉模型等为核心业务的战略方向。这一举措有助于商汤科技集中资源&#xff0c;加强在核心业务领域的研发和市场拓展&#xff0c;提高市场竞争力。同时&#xff0c;坚定生成式AI为代表的…...

MyBatis异常体系中ErrorContext和ExceptionFactory原理分析

&#x1f3ae; 作者主页&#xff1a;点击 &#x1f381; 完整专栏和代码&#xff1a;点击 &#x1f3e1; 博客主页&#xff1a;点击 文章目录 exceptions包分包设计ExceptionFactory类介绍为什么使用工厂不是直接new呢&#xff1f;【统一的异常处理机制】【异常的封装与转化】【…...

WHLUG丨deepin、华中科技大学开放原子开源俱乐部、 RustSBI 和清华大学开源操作系统训练营共话开源新生代成长之路

2024年11月30日下午&#xff0c;由 deepin&#xff08;深度&#xff09;社区联合华中科技大学开放原子开源俱乐部、 RustSBI 开源社区和清华大学开源操作系统训练营共同举办的WHLUG&#xff08;武汉Linux用户组&#xff09;线下沙龙在华中科技大学成功举办。 本次活动聚集了50余…...

通过HTML Canvas 在图片上绘制文字

目录 前言 一、HTML Canvas 简介 二、准备工作 三、绘制图片 四、绘制文字 五、完整代码 效果演示&#xff1a; 前言 HTML canvas 为我们提供了无限的创意可能性。今天&#xff0c;我们就来探索一下如何通过 HTML canvas 将图片和文字绘制到图片上&#xff0c;创造出独特…...

C# 冒泡的算法

C# 冒泡的算法 public void BubbleSort(int[] arr) {int temp;for (int j 0; j < arr.Length - 2; j){for (int i 0; i < arr.Length - 2; i){if (arr[i] > arr[i 1]){temp arr[i 1];arr[i 1] arr[i];arr[i] temp;}}} }使用方法 int[] array new int[] { 5,…...

大数据项目-Django基于聚类算法实现的房屋售房数据分析及可视化系统

《[含文档PPT源码等]精品Django基于聚类算法实现的房屋售房数据分析及可视化系统》该项目含有源码、文档、PPT、配套开发软件、软件安装教程课程答疑等&#xff01; 数据库管理工具&#xff1a;phpstudy/Navicat或者phpstudy/sqlyog 后台管理系统涉及技术&#xff1a; 后台使…...

AWS创建ec2实例并连接成功

aws创建ec2实例并连接 aws创建ec2并连接 1.ec2创建前准备 首先创建一个VPC隔离云资源并且有公有子网 2.创建EC2实例 1.启动新实例或者创建实例 2.创建实例名 3.选择AMI使用linux(HVM) 4.选择实例类型 5.创建密钥对下载到本地并填入密钥对名称 6.选择自己创建的VPC和公有子网…...

TypeScript 开始学习 -接触的新东西

目录 语言类型类型总览JavaScript 中的数据类型TypeScript 中的数据类型 定义类型断言索引签名泛型 语言类型 JS -> 弱类型 TS -> 强类型 TypeScript&#xff08;TS&#xff09;是一种强类型语言。‌这意味着在TypeScript中&#xff0c;变量和函数参数的类型必须在编译时…...

非对称任意进制转换器(安卓)

除了正常进制转换&#xff0c;还可以输入、输出使用不同的数字符号&#xff0c;达成对数值进行加密的效果 点我下载APK安装包 使用unity开发。新建一个c#代码文件&#xff0c;把代码覆盖进去&#xff0c;再把代码文件添加给main camera即可。 using System.Collections; usin…...

【优选算法篇】寻找隐藏的宝藏:用二分查找打开算法世界的大门(上篇)

文章目录 须知 &#x1f4ac; 欢迎讨论&#xff1a;如果你在学习过程中有任何问题或想法&#xff0c;欢迎在评论区留言&#xff0c;我们一起交流学习。你的支持是我继续创作的动力&#xff01; &#x1f44d; 点赞、收藏与分享&#xff1a;觉得这篇文章对你有帮助吗&#xff1…...

基于Vue实现的移动端手机商城项目 电商购物网站 成品源码

&#x1f4c2;文章目录 一、&#x1f4d4;网站题目 二、✍️网站描述 三、&#x1f4da;网站介绍 四、&#x1f310;网站演示 &#x1f4f8;部分截图 &#x1f3ac;视频演示 五、⚙️网站代码 &#x1f9f1;项目结构 &#x1f492;vue代码预览 六、&#x1f527;完整…...

C语言:数组

数组 数组的概念 引例 如果我们要在程序中表示一个学生的成绩&#xff0c;我们会使用一个int来表示&#xff0c;如&#xff1a;int score。假如我们要在程序中表示一组成绩&#xff0c;此时我们所学的常规的数据类型就无法再表示&#xff0c;这个时候我们就需要使用一种新的…...

iPhone密码忘记了办?iPhoneUnlocker,iPhone解锁工具Aiseesoft iPhone Unlocker 高级注册版​分享

平时用 iPhone 的时候&#xff0c;难免会碰到解锁的麻烦事。比如密码忘了、人脸识别 / 指纹识别突然不灵&#xff0c;或者买了二手 iPhone 却被原来的 iCloud 账号锁住&#xff0c;这时候就需要靠谱的解锁工具来帮忙了。Aiseesoft iPhone Unlocker 就是专门解决这些问题的软件&…...

UE5 学习系列(三)创建和移动物体

这篇博客是该系列的第三篇&#xff0c;是在之前两篇博客的基础上展开&#xff0c;主要介绍如何在操作界面中创建和拖动物体&#xff0c;这篇博客跟随的视频链接如下&#xff1a; B 站视频&#xff1a;s03-创建和移动物体 如果你不打算开之前的博客并且对UE5 比较熟的话按照以…...

渲染学进阶内容——模型

最近在写模组的时候发现渲染器里面离不开模型的定义,在渲染的第二篇文章中简单的讲解了一下关于模型部分的内容,其实不管是方块还是方块实体,都离不开模型的内容 🧱 一、CubeListBuilder 功能解析 CubeListBuilder 是 Minecraft Java 版模型系统的核心构建器,用于动态创…...

视频字幕质量评估的大规模细粒度基准

大家读完觉得有帮助记得关注和点赞&#xff01;&#xff01;&#xff01; 摘要 视频字幕在文本到视频生成任务中起着至关重要的作用&#xff0c;因为它们的质量直接影响所生成视频的语义连贯性和视觉保真度。尽管大型视觉-语言模型&#xff08;VLMs&#xff09;在字幕生成方面…...

Neo4j 集群管理:原理、技术与最佳实践深度解析

Neo4j 的集群技术是其企业级高可用性、可扩展性和容错能力的核心。通过深入分析官方文档,本文将系统阐述其集群管理的核心原理、关键技术、实用技巧和行业最佳实践。 Neo4j 的 Causal Clustering 架构提供了一个强大而灵活的基石,用于构建高可用、可扩展且一致的图数据库服务…...

企业如何增强终端安全?

在数字化转型加速的今天&#xff0c;企业的业务运行越来越依赖于终端设备。从员工的笔记本电脑、智能手机&#xff0c;到工厂里的物联网设备、智能传感器&#xff0c;这些终端构成了企业与外部世界连接的 “神经末梢”。然而&#xff0c;随着远程办公的常态化和设备接入的爆炸式…...

AI病理诊断七剑下天山,医疗未来触手可及

一、病理诊断困局&#xff1a;刀尖上的医学艺术 1.1 金标准背后的隐痛 病理诊断被誉为"诊断的诊断"&#xff0c;医生需通过显微镜观察组织切片&#xff0c;在细胞迷宫中捕捉癌变信号。某省病理质控报告显示&#xff0c;基层医院误诊率达12%-15%&#xff0c;专家会诊…...

Caliper 负载(Workload)详细解析

Caliper 负载(Workload)详细解析 负载(Workload)是 Caliper 性能测试的核心部分,它定义了测试期间要执行的具体合约调用行为和交易模式。下面我将全面深入地讲解负载的各个方面。 一、负载模块基本结构 一个典型的负载模块(如 workload.js)包含以下基本结构: use strict;/…...

LCTF液晶可调谐滤波器在多光谱相机捕捉无人机目标检测中的作用

中达瑞和自2005年成立以来&#xff0c;一直在光谱成像领域深度钻研和发展&#xff0c;始终致力于研发高性能、高可靠性的光谱成像相机&#xff0c;为科研院校提供更优的产品和服务。在《低空背景下无人机目标的光谱特征研究及目标检测应用》这篇论文中提到中达瑞和 LCTF 作为多…...

小木的算法日记-多叉树的递归/层序遍历

&#x1f332; 从二叉树到森林&#xff1a;一文彻底搞懂多叉树遍历的艺术 &#x1f680; 引言 你好&#xff0c;未来的算法大神&#xff01; 在数据结构的世界里&#xff0c;“树”无疑是最核心、最迷人的概念之一。我们中的大多数人都是从 二叉树 开始入门的&#xff0c;它…...