Spring Boot中Excel数据导入导出的高效实现

🌟 前言

欢迎来到我的技术小宇宙!🌌 这里不仅是我记录技术点滴的后花园,也是我分享学习心得和项目经验的乐园。📚 无论你是技术小白还是资深大牛,这里总有一些内容能触动你的好奇心。🔍

  • 🤖 洛可可白:个人主页

  • 🔥 个人专栏:✅前端技术 ✅后端技术

  • 🏠 个人博客:洛可可白博客

  • 🐱 代码获取:bestwishes0203

  • 📷 封面壁纸:洛可可白wallpaper

在这里插入图片描述

文章目录

  • 标题:Spring Boot中Excel数据导入导出的高效实现
    • 摘要
    • 1. 依赖添加
    • 2. 自定义监听器(可选)
    • 3. 实体类定义
    • 4. 控制层实现
      • 导出数据
      • 导入数据
    • 🎉 结语

标题:Spring Boot中Excel数据导入导出的高效实现

摘要

在企业级应用中,Excel文件的导入导出是一个常见的需求。本文将介绍如何在Spring Boot项目中使用EasyExcel库实现Excel文件的导入导出功能。我们将通过实际的代码示例,展示如何读取和写入Excel文件,以及如何通过自定义监听器来增强数据处理的灵活性。

1. 依赖添加

首先,我们需要在项目的pom.xml文件中添加EasyExcel的依赖。

<!-- 导出excel -->
<dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>3.2.1</version>
</dependency>

2. 自定义监听器(可选)

为了增强数据处理的灵活性,我们可以创建一个自定义监听器来校验Excel文件中的数据。例如,我们可以校验用户名称是否重复,或者数据格式是否正确。

import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;
import com.alibaba.excel.exception.ExcelDataConvertException;
import com.xiaohe.uploadimage.entity.User;/*** 自定义监听器,对下载的excel中的数据进行校验*/public class UserListener extends AnalysisEventListener {List<String> names = new ArrayList<>();/*** 每解析一行,回调该方法** @param data* @param context*/@Overridepublic void invoke(Object data, AnalysisContext context) {//校验名称String name = ((User) data).getU_name();
//        if (StrUtil.isBlank(name)) {
//            throw new RuntimeException(String.format("第%s行名称为空,请核实", context.readRowHolder().getRowIndex() + 1));
//        }if (names.contains(name)) {throw new RuntimeException(String.format("第%s行名称已重复,请核实", context.readRowHolder().getRowIndex() + 1));} else {names.add(name);}}/*** 出现异常回调** @param exception* @param context* @throws Exception*/@Overridepublic void onException(Exception exception, AnalysisContext context) throws Exception {if (exception instanceof ExcelDataConvertException) {/**从0开始计算*/int columnIndex = ((ExcelDataConvertException) exception).getColumnIndex() + 1;int rowIndex = ((ExcelDataConvertException) exception).getRowIndex() + 1;String message = "第" + rowIndex + "行,第" + columnIndex + "列" + "数据格式有误,请核实";throw new RuntimeException(message);} else if (exception instanceof RuntimeException) {throw exception;} else {super.onException(exception, context);}}/*** 解析完,全部回调** @param context*/@Overridepublic void doAfterAllAnalysed(AnalysisContext context) {//解析完,全部回调逻辑实现names.clear();}
}

3. 实体类定义

我们需要定义一个实体类来映射Excel文件中的列。使用@ExcelProperty注解来指定Excel列的名称。

import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.annotation.format.DateTimeFormat;
import com.alibaba.excel.annotation.write.style.ColumnWidth;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;// ... 其他代码 ...@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class User {// ... 实体类属性和注解 ...@ExcelProperty("账号")private String u_acc;@ExcelProperty("密码")private String u_pwd;@ExcelProperty("姓名")private String u_name;@ExcelProperty("性别")private String u_sex;@ColumnWidth(20)@DateTimeFormat("yyyy-MM-dd")@JsonFormat(pattern = "yyyy-MM-dd")@ExcelProperty("生日")private Date u_birth;@ExcelProperty("角色")private String u_ide;@ExcelProperty("状态")private int u_statues;@ColumnWidth(20)@DateTimeFormat("yyyy-MM-dd HH:mm:ss")@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")@ExcelProperty("创建日期")private Date u_create_time;
}

4. 控制层实现

导出数据

在控制器中,我们提供一个接口来导出Excel文件。EasyExcel提供了便捷的API来生成Excel文件。

import com.alibaba.excel.EasyExcel;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;// ... 其他代码 ...@RestController
public class ExcelController {@Autowiredprivate ExcelMapper excelMapper;@GetMapping("user")public List<User> user() {return excelMapper.selectUserAll();}/*** 导出数据*/@GetMapping("exportExcel")public void exportData(HttpServletResponse response) throws IOException {// ... 导出数据代码 ...response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");response.setCharacterEncoding("utf-8");String fileName = URLEncoder.encode("用户表", StandardCharsets.UTF_8).replaceAll("\\+", "%20");List<User> users = excelMapper.selectUserAll();response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + fileName + ".xlsx");EasyExcel.write(response.getOutputStream(), User.class).sheet("用户表").doWrite(users);}
}

导入数据

同样地,我们提供一个接口来处理Excel文件的导入。通过EasyExcel的读取功能,我们可以将Excel文件中的数据转换为Java对象。

import com.alibaba.excel.EasyExcel;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;// ... 其他代码 ...@RestController
public class ExcelController {/*** 导入数据*/@PostMapping("/importExcel")public Integer importData(MultipartFile file) {try {//获取文件的输入流InputStream inputStream = file.getInputStream();List<User> lst = EasyExcel.read(inputStream) //调用read方法//注册自定义监听器,字段校验可以在监听器内实现.registerReadListener(new UserListener()).head(User.class) //对应导入的实体类.sheet(0) //导入数据的sheet页编号,0代表第一个sheet页,如果不填,则会导入所有sheet页的数据.headRowNumber(1) //列表头行数,1代表列表头有1行,第二行开始为数据行.doReadSync(); //开始读Excel,返回一个List<T>集合,继续后续入库操作//模拟导入数据库操作for (User user : lst) {Date date = user.getU_birth();String form = String.format("%tF", date);System.out.println(form);}return 1;} catch (IOException exception) {throw new RuntimeException(exception);}}
}

🎉 结语

通过本文的介绍,我们学习了如何在Spring Boot项目中使用EasyExcel库来实现Excel文件的导入导出。自定义监听器的引入使得数据处理更加灵活,能够应对各种复杂的业务需求。EasyExcel的简单易用和强大的功能,使得Excel文件处理变得高效和便捷。在实际开发中,开发者可以根据项目需求,选择合适的库来实现Excel文件的处理。

感谢你的访问,期待与你在技术的道路上相遇!👋🌟🚀

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/729040.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于SpringBoot+MYSQL的大学生租房平台

目录 1、 前言介绍 2、主要技术 3、系统流程 3.1、操作流程 3.2、登录流程 3.3、删除信息流程 3.4、添加信息流程 4、功能需求 5、系统设计 5.1、功能结构设计 5.1、数据库概念设计 6、运行截图(部分) 6.1、管理员功能实现 6.1.1、房东管理 6.1.2、信息审批管理 …

Springboot启动后想要做某些事可以通过什么方法实现?

在Spring Boot应用中&#xff0c;如果你想在应用启动完成后执行一些特定的操作&#xff08;例如缓存预热&#xff09;&#xff0c;可以实现CommandLineRunner或ApplicationRunner接口。这两个接口都提供了一个run方法&#xff0c;在Spring Boot应用上下文初始化完成后会被自动调…

Redis 配置文件详解

Units 单位 配置大小单位&#xff0c;开头定义了一些基本的度量单位&#xff0c;只支持bytes&#xff0c;不支持bit&#xff0c;大小写不敏感。 # Redis configuration file example. # # Note that in order to read the configuration file, Redis must be # started with …

java实现文件下载(前端传文件后端以流的方式进行输出)

其实文件的下载在前面的博客当中已经提到过了&#xff0c;但是本次单出一片博客的目的主要还是想把流程给理清楚&#xff0c;授人以鱼不如授人以渔对吧。 想要看文件上传的请跳转到前面一篇博文&#xff1a; java实现文件上传到本地 那接下来我们来看看具体的实现步骤吧~ 一…

聚观早报 | 腾讯QQ测试AI对话功能;哪吒L官宣4月交付

聚观早报每日整理最值得关注的行业重点事件&#xff0c;帮助大家及时了解最新行业动态&#xff0c;每日读报&#xff0c;就读聚观365资讯简报。 整理丨Cutie 3月8日消息 腾讯QQ测试AI对话功能 哪吒L官宣4月交付 中国对瑞士等6国试行免签 Redmi K70至尊版细节曝光 Meta正…

IDEA自定义Maven仓库

Maven 是一款广泛应用于 Java 开发的工具&#xff0c;其作用类似于一个全自动的 JAR 包管理器&#xff0c;能够方便地导入开发所需的相关 JAR 包。在使用 Maven 进行 Java 程序开发时&#xff0c;开发者能够极大地提高开发效率。以下是关于如何安装 Maven 以及在 IDEA 中配置自…

【数据结构】二、线性表:1.顺序表的插入、删除、查找、特点

文章目录 1.3插入1.4删除1.5查找1.5.1按位查找1.5.2按值查找 1.6特点 1.3插入 把新的数据插入的目标位置之后&#xff0c;把目标位置后面的数据依次向后进行移动。 bool ListInsert(SqList &L,int i,int e){if(i<1||i>L.length1) //判断i的范围是否有效return fals…

Linux软件高级编程-网络--TCP通信--day13

TCP发端: socket connect send recv close TCP收端: socket bind listen accept send recv close 1.connect int connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen); 功能: …

使用 CSS 的 line-height 属性来提高可读性

在本文中&#xff0c;您将了解 CSS line-height 属性以及如何使用它来创建视觉上愉悦、易读的文本。 您可能以前见过 line-height 的使用&#xff1a; p {font-size: 16px;line-height: 1.2; }但它是如何工作的&#xff0c;以及在 CSS 中扮演着什么角色呢&#xff1f; CSS 中…

基于LSTM实现春联上联对下联

按照阿光的项目做出了学习笔记&#xff0c;pytorch深度学习实战项目100例 基于LSTM实现春联上联对下联 基于LSTM&#xff08;长短期记忆网络&#xff09;实现春联上联对下联是一种有趣且具有挑战性的任务&#xff0c;它涉及到自然语言处理&#xff08;NLP&#xff09;中的序列…

Android 4.4 以下,OkHttp访问Https报错,设置了sslSocketFactory仍无效的解决方法

背景 Android 4.4 及以下&#xff0c;使用 OkHttp 发送 Https 请求&#xff0c;报以下错误&#xff1a; javax.net.ssl.SSLHandshakeException: javax.net.ssl.SSLProtocolException: SSL handshake aborted: ssl0x6b712c90: Failure in SSL library, usually a protocol erro…

【Jemter】安装

1.准备前提工作 2.安装和卸载jdk 1&#xff09;安装双击jdk 2&#xff09;添加环境变量 此电脑–属性–高级系统设置–环境变量–系统变量–path删除/新建 C:\Program Files\Java\jdk-1.8\bin C:\Program Files\Java\jdk-1.8\jre 3&#xff09;验证 以防万一要卸载&#xff…

基于yolov5的铁轨缺陷检测系统,可进行图像目标检测,也可进行视屏和摄像检测(pytorch框架)【python源码+UI界面+功能源码详解】

功能演示&#xff1a; 基于yolov5的铁轨缺陷检测系统&#xff0c;系统既能够实现图像检测&#xff0c;也可以进行视屏和摄像实时检测_哔哩哔哩_bilibili &#xff08;一&#xff09;简介 基于yolov5的铁轨缺陷检测系统是在pytorch框架下实现的&#xff0c;这是一个完整的项目…

Vue 使用Element Plus

1.官网安装 | Element PlusA Vue 3 based component library for designers and developershttps://element-plus.gitee.io/zh-CN/guide/installation.html#%E4%BD%BF%E7%94%A8%E5%8C%85%E7%AE%A1%E7%90%86%E5%99%A8 npm install element-plus --save2. 全局安装图标 npm ins…

如何避免前端请求明文传输

要在前端发送请求时做到不明文&#xff0c;有以下几种方法&#xff1a; HTTPS 加密传输&#xff1a; 使用 HTTPS 协议发送请求&#xff0c;所有的数据都会在传输过程中进行加密&#xff0c;从而保护数据不以明文形式传输。这样即使数据被截获&#xff0c;黑客也无法直接获取到数…

连接kafka报错:java.io.IOException: Can‘t resolve address:

修改电脑host文件:C:\Windows\System32\drivers\etc\hosts 加上一行 192.168.1.XXX MHA_SLAVE2&#xff08;192.168.1.XXX 这个是安装kafka 的服务器地址&#xff0c;MHA_SLAVE2是kafka的容器id&#xff09;

总结虚拟机的安装步骤:

总结虚拟机的安装配置步骤 保障镜像的基本完整&#xff0c;查看其镜像源是否是完整的&#xff0c;不能使用redhat的配置&#xff0c;原因在于其yum源中可能存在一些配置的消失。然后开始安装虚拟机&#xff0c;虚拟机的软件版本越高其运行的效果也就越好&#xff0c;在进入初始…

极狐GitLab 16.2 重点功能解读,更好的DevOps体验等你来【二】

GitLab 是一个全球知名的一体化 DevOps 平台&#xff0c;很多人都通过私有化部署 GitLab 来进行源代码托管。极狐GitLab 是 GitLab 在中国的发行版&#xff0c;专门为中国程序员服务。可以一键式部署极狐GitLab。 极狐GitLab 在去年 7 月份发布了 16.2 版本。此次发布带来了价…

构建可视化工具选择策略

更多的信息总是意味着更好的结果吗&#xff1f;这完全取决于项目所处的环境。 以烘焙为例。当你做蛋糕时&#xff0c;你的原材料经历了许多化学变化和烹制过程。如果任何一个环节出现问题&#xff0c;蛋糕就做不好。但这并不意味着你需要理解食材在分子级别上发生了什么&#…

科技云报道:阿里云降价,京东云跟进,谁能打赢云计算价格战?

科技云报道原创。 就在大家还在回味2月29日阿里云发布“史上最大降价”的惊喜时&#xff0c;京东云连夜发布降价消息&#xff0c;成为第一家跟进的云服务商&#xff0c;其“随便降&#xff0c;比到底&#xff01;”的口号&#xff0c;颇有对垒的意味&#xff0c;直接吹响了云计…