php网站开发实例教程 源码,网站被恶意刷流量,公司官网推广,免费图纸网站#x1f31f; 前言 欢迎来到我的技术小宇宙#xff01;#x1f30c; 这里不仅是我记录技术点滴的后花园#xff0c;也是我分享学习心得和项目经验的乐园。#x1f4da; 无论你是技术小白还是资深大牛#xff0c;这里总有一些内容能触动你的好奇心。#x1f50d; #x… 前言 欢迎来到我的技术小宇宙 这里不仅是我记录技术点滴的后花园也是我分享学习心得和项目经验的乐园。 无论你是技术小白还是资深大牛这里总有一些内容能触动你的好奇心。 洛可可白个人主页 个人专栏✅前端技术 ✅后端技术 个人博客洛可可白博客 代码获取bestwishes0203 封面壁纸洛可可白wallpaper 文章目录 标题Spring Boot中Excel数据导入导出的高效实现摘要1. 依赖添加2. 自定义监听器可选3. 实体类定义4. 控制层实现导出数据导入数据 结语 往期精彩回顾 标题Spring Boot中Excel数据导入导出的高效实现
摘要
在企业级应用中Excel文件的导入导出是一个常见的需求。本文将介绍如何在Spring Boot项目中使用EasyExcel库实现Excel文件的导入导出功能。我们将通过实际的代码示例展示如何读取和写入Excel文件以及如何通过自定义监听器来增强数据处理的灵活性。
1. 依赖添加
首先我们需要在项目的pom.xml文件中添加EasyExcel的依赖。
!-- 导出excel --
dependencygroupIdcom.alibaba/groupIdartifactIdeasyexcel/artifactIdversion3.2.1/version
/dependency2. 自定义监听器可选
为了增强数据处理的灵活性我们可以创建一个自定义监听器来校验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 {ListString 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 ListUser 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);ListUser 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();ListUser lst EasyExcel.read(inputStream) //调用read方法//注册自定义监听器字段校验可以在监听器内实现.registerReadListener(new UserListener()).head(User.class) //对应导入的实体类.sheet(0) //导入数据的sheet页编号0代表第一个sheet页如果不填则会导入所有sheet页的数据.headRowNumber(1) //列表头行数1代表列表头有1行第二行开始为数据行.doReadSync(); //开始读Excel返回一个ListT集合继续后续入库操作//模拟导入数据库操作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文件的处理。
如果对你有帮助点赞、收藏、关注是我更新的动力 往期精彩回顾 Spring Boot工程集成验证码生成与验证功能教程 文章浏览阅读1.3k次点赞17次收藏38次。 Spring Boot 3项目集成Swagger3教程 文章浏览阅读768次点赞8次收藏15次。 Spring Boot中实现图片上传功能的两种策略 文章浏览阅读1.1k次点赞11次收藏22次。 VS code搭建C/C运行环境简单易上手 文章浏览阅读2.7k次点赞8次收藏5次。 入门指南使用uni-app构建跨平台应用 文章浏览阅读1.2k次点赞29次收藏9次。