EasyExcel根据对应的实体类模板完成多个sheet的写入与读取
1.展示模板一的实体类
import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.annotation.write.style.ColumnWidth;
import com.alibaba.excel.annotation.write.style.ContentRowHeight;
import com.alibaba.excel.annotation.write.style.HeadRowHeight;
import io.swagger.annotations.ApiModel;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;import javax.validation.constraints.NotBlank;@Data
@NoArgsConstructor
@AllArgsConstructor
@ApiModel(value="RegObject对象", description="不动产单元")
//表头行高
@HeadRowHeight(30)
//内容单元格行高
@ContentRowHeight(25)
public class RegObject {@ExcelProperty(value = "客体类型", index = 0)@ColumnWidth(20)@NotBlank(message = "客体类型不能为空")private String propertyType;@ExcelProperty(value = "不动产单元号", index = 1)@ColumnWidth(30)@NotBlank(message = "不动产单元号不能为空")private String regNumber;}
2.展示模板二的实体类
import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.annotation.format.DateTimeFormat;
import com.alibaba.excel.annotation.write.style.ColumnWidth;
import com.alibaba.excel.annotation.write.style.ContentRowHeight;
import com.alibaba.excel.annotation.write.style.HeadRowHeight;
import io.swagger.annotations.ApiModel;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;import javax.validation.constraints.NotBlank;
import java.util.Date;@Data
@NoArgsConstructor
@AllArgsConstructor
@ApiModel(value="IncomeInfo对象", description="受理信息")
//表头行高
@HeadRowHeight(30)
//内容单元格行高
@ContentRowHeight(25)
public class IncomeInfo {@ExcelProperty(value = "受理人", index = 0)@ColumnWidth(20)@NotBlank(message = "受理人不能为空")private String incomeMan;@ExcelProperty(value = "审批流程", index = 1)@ColumnWidth(20)@NotBlank(message = "审批流程不能为空")private String workId;@ExcelProperty(value = "坐落", index = 2)@ColumnWidth(20)@NotBlank(message = "坐落不能为空")private String seatName;// @ExcelProperty(value = "结束时间", index = 3)
// @ColumnWidth(20)
// @NotBlank(message = "结束时间不能为空")
// @DateTimeFormat(value = "yyyy年MM月dd日 HH时mm分ss秒")
// private String endDate;@ExcelProperty(value = "结束时间", index = 3)@ColumnWidth(20)@NotBlank(message = "结束时间不能为空")@DateTimeFormat(value = "yyyy-MM-dd HH:mm:ss")private Date endDate;
}
3.展示easyExcel实现写入功能的代码
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.ExcelWriter;
import com.alibaba.excel.write.builder.ExcelWriterBuilder;
import com.alibaba.excel.write.metadata.WriteSheet;
import com.guan.study.easyExcelDemo.IncomeInfo;
import com.guan.study.easyExcelDemo.RegObject;import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;public class WriteExcelDemo03 {private static final String PATH = "D:\\WorkDirTest2\\测试.xls";private static List<String> list = new ArrayList<>();public static void main(String[] args) {list.add("不动产单元信息");list.add("受理信息");//如果文件存在就删除Path path = Paths.get(PATH);if (Files.exists(path)) {try {Files.delete(path);} catch (IOException e) {System.out.println("无法删除文件:" + e.getMessage());}}ExcelWriterBuilder write = EasyExcel.write(PATH);// 创建ExcelWriter对象ExcelWriter excelWriter = write.build();// 向Excel的同一个Sheet重复写入数据for (int i = 0; i < list.size(); i++) {// 创建Sheet对象WriteSheet writeSheet = EasyExcel.writerSheet(list.get(i)).build();// 设置excel模板寻求首航标题的类writeSheet.setClazz(getTargetClass(list.get(i)));// 设置数据到该sheet中excelWriter.write(data(list.get(i)), writeSheet);}// 关闭流excelWriter.finish();}/*** 根据传入的字符串返回对应的目标类*/private static Class<?> getTargetClass(String str) {switch (str) {case "不动产单元信息":return RegObject.class;case "受理信息":return IncomeInfo.class;default:return null;}}/*** 模拟前端传过来的数据 不动产单元信息*/private static List<Object> data(String str) {SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");List<Object> list = new ArrayList<>();switch (str) {case "不动产单元信息":RegObject regObject1 = new RegObject();regObject1.setPropertyType("0008");regObject1.setRegNumber("130000000001GB00001F00010001");list.add(regObject1);RegObject regObject2 = new RegObject();regObject2.setPropertyType("0008");regObject2.setRegNumber("130000000001GB00001F00010002");list.add(regObject2);break;case "受理信息":IncomeInfo info1 = new IncomeInfo();info1.setIncomeMan("00000001");info1.setWorkId("0001");info1.setSeatName("130208");//info1.setEndDate(dateFormat.format(new Date()));info1.setEndDate(new Date());list.add(info1);IncomeInfo info2 = new IncomeInfo();info2.setIncomeMan("00000001");info2.setWorkId("0002");info2.setSeatName("130229");//info2.setEndDate(dateFormat.format(new Date()));info2.setEndDate(new Date());list.add(info2);break;}return list;}
}
4.展示D:\WorkDirTest2路径下测试.xls中的效果


5.读取excel代码
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.ExcelReader;
import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;
import com.alibaba.excel.read.metadata.ReadSheet;
import com.guan.study.easyExcelDemo.IncomeInfo;
import com.guan.study.easyExcelDemo.RegObject;import java.util.ArrayList;
import java.util.List;public class ReadExcelDemo03 {private static List<String> list = new ArrayList<>();public static void main(String[] args) {list.add("不动产单元信息");list.add("受理信息");// 读取的excel文件路径String filename = "D:\\WorkDirTest2\\测试.xls";for (int i = 0; i < list.size(); i++) {readExcel(filename, i, getTargetClass(list.get(i)));}//readExcel(filename, 0, RegObject.class);//readExcel(filename, 1, IncomeInfo.class);}private static <T> void readExcel(String filename, int sheetNo, Class<T> clazz) {// 构建ExcelReader对象ExcelReader excelReader = EasyExcel.read(filename).build();// 构建sheet对象ReadSheet sheet = EasyExcel.readSheet(sheetNo).head(clazz) // 指定数据模板.registerReadListener(new AnalysisEventListener<T>() {// 每解析一行数据,该方法会被调用一次@Overridepublic void invoke(T data, AnalysisContext context) {System.out.println("解析数据为:" + data.toString());}// 全部解析完成被调用@Overridepublic void doAfterAllAnalysed(AnalysisContext context) {//System.out.println("解析完成...");}}).build();// 读取sheetexcelReader.read(sheet);// 需要自己关闭流操作,在读取文件时会创建临时文件,如果不关闭,会损耗磁盘,严重的磁盘爆掉excelReader.finish();}/*** 根据传入的字符串返回对应的目标类*/private static Class<?> getTargetClass(String str) {switch (str) {case "不动产单元信息":return RegObject.class;case "受理信息":return IncomeInfo.class;default:return null;}}}

pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.7.13</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.guan</groupId><artifactId>EasyExcel-study</artifactId><version>0.0.1-SNAPSHOT</version><name>EasyExcel-study</name><description>EasyExcel-study</description><properties><java.version>1.8</java.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-validation</artifactId></dependency><!-- https://mvnrepository.com/artifact/org.hibernate/hibernate-validator --><dependency><groupId>org.hibernate</groupId><artifactId>hibernate-validator</artifactId><version>5.4.3.Final</version></dependency><!-- https://mvnrepository.com/artifact/javax.validation/validation-api --><dependency><groupId>javax.validation</groupId><artifactId>validation-api</artifactId><version>2.0.1.Final</version></dependency><dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>3.1.3</version><exclusions><exclusion><groupId>javax.servlet</groupId><artifactId>servlet-api</artifactId></exclusion><exclusion><groupId>org.apache.poi</groupId><artifactId>poi</artifactId></exclusion><exclusion><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId></exclusion><exclusion><groupId>org.apache.poi</groupId><artifactId>poi-ooxml-schemas</artifactId></exclusion></exclusions></dependency><!-- https://mvnrepository.com/artifact/org.apache.poi/poi --><dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>5.2.3</version></dependency><!-- https://mvnrepository.com/artifact/org.apache.poi/poi-ooxml --><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>5.2.3</version></dependency><!-- https://mvnrepository.com/artifact/joda-time/joda-time --><dependency><groupId>joda-time</groupId><artifactId>joda-time</artifactId><version>2.12.5</version></dependency><!-- https://mvnrepository.com/artifact/junit/junit --><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.13.2</version><scope>test</scope></dependency><!--swagger--><dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger2</artifactId><version>2.9.2</version></dependency><dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger-ui</artifactId><version>2.9.2</version></dependency><!--lombok用来简化实体类:需要安装lombok插件--><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.20</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.apache.commons</groupId><artifactId>commons-lang3</artifactId></dependency><!-- https://mvnrepository.com/artifact/org.jsoup/jsoup --><dependency><groupId>org.jsoup</groupId><artifactId>jsoup</artifactId><version>1.15.3</version></dependency></dependencies><build><plugins><!-- Add Lombok Plugin --><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.8.1</version><configuration><source>1.8</source><target>1.8</target><annotationProcessorPaths><path><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.24</version></path></annotationProcessorPaths></configuration></plugin></plugins></build></project>相关文章:
EasyExcel根据对应的实体类模板完成多个sheet的写入与读取
1.展示模板一的实体类 import com.alibaba.excel.annotation.ExcelProperty; import com.alibaba.excel.annotation.write.style.ColumnWidth; import com.alibaba.excel.annotation.write.style.ContentRowHeight; import com.alibaba.excel.annotation.write.style.HeadRowH…...
在企业数字化转型过程中,IT运维发挥着怎样的价值?
IT运维软件在企业数字化转型中发挥着重要的价值。从效率、稳定性、安全性和资源利用率以及数据分析决策支持都有巨大的提升。 提高效率 利用自动化巡检功能,实时或定时进行系统巡检,减少人力巡检的繁琐和低效,避免手动操作的失误,…...
01-工厂模式 ( Factory Pattern )
工厂模式 Factory Pattern 摘要实现范例 工厂模式(Factory Pattern)提供了一种创建对象的最佳方式 工厂模式在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象 工厂模式属于创建型模式 摘要 1. 意图 …...
【LeetCode】每日一题 2024_2_2 石子游戏 VI(排序、贪心)
文章目录 LeetCode?启动!!!题目:石子游戏 VI题目描述代码与解题思路 LeetCode?启动!!! 题目:石子游戏 VI 题目链接:1686. 石子游戏 VI 题目描述…...
一站式在线协作开源办公软件ONLYOFFICE,协作更安全更便捷
1、ONLYOFFICE是什么? ONLYOFFICE是一款功能强大的在线协作办公软件,可以创建编辑Word文档、Excel电子表格,PowerPoint(PPT)演示文稿、Forms表单等多种文件。ONLYOFFICE支持多个平台,无论使用的是 Windows、…...
Java进击框架:Spring-综合(十)
Java进击框架:Spring-综合(十) 前言Rest ClientsWebClientRestTemplateHTTP接口 JMS (Java消息服务)使用Spring JMS发送消息接收消息注释驱动的侦听器端点 JMXEmail任务执行和调度Spring TaskExecutor 抽象Spring TaskScheduler 抽象支持调度…...
2024年第九届信号与图像处理国际会议(ICSIP 2024)
2024第九届信号与图像处理国际会议(ICSIP 2024)将于2024年7月12-14日在中国南京召开。ICSIP每年召开一次,在过去的七年中吸引了1200多名与会者,是展示信号和图像处理领域最新进展的领先国际会议之一。本次将汇集来自亚太国家、北美…...
webassembly003 MINISIT mnist/convert-h5-to-ggml.py
数据结构 # Convert MNIS h5 transformer model to ggml format # # Load the (state_dict) saved model using PyTorch # Iterate over all variables and write them to a binary file. # # For each variable, write the following: # - Number of dimensions (int) # …...
fetch和axios的区别
概念不同 Fetch是一种新的获取资源的接口方式,可以直接使用Axios是一个基于XMLHttpRequest封装的工具包,需要引入才可以使用 传递数据的方式不同 Fetch则是需要放在body属性中,以字符串的方式进行传递Axios是放到data属性里,以对象…...
【unity小技巧】FPS简单的射击换挡瞄准动画控制
文章目录 射击动画控制换弹动画瞄准动画完结 射击动画控制 换弹动画 调用 瞄准动画 问题:瞄准时,但是动画会卡住,不会播放瞄准的待机动画 修改 调用 动画如果太快可以去修改播放速度 播放速度变慢了,可能导致切换待机动画也…...
如何获取时间戳
在JavaScript中,你可以使用Date对象来获取时间戳。以下是一个例子: javascriptvar timestamp new Date().getTime(); console.log(timestamp); 在这个例子中,new Date()创建了一个新的日期对象,.getTime()方法则返回自1970年1月…...
VSCode 设置代理
Open Visual Studio Code, click the settings icon in the lower left corner, and click Settings....
保姆级教程: 零门槛制作AI微信红包封面之入门篇
写在前面 本文旨在低门槛制作微信红包教程,人人均可上手! 操作步骤 AI红包制作平台: https://cover.fdfs.site 第一步: 先登录 alt text 可以使用谷歌,github直接登录,也可以用自己的邮箱注册 第二步: 设置自己的apiKey API-Key可以从平台 ht…...
Redis核心技术与实战【学习笔记】 - 17.Redis 缓存异常:缓存雪崩、击穿、穿透
概述 Redis 的缓存异常问题,除了数据不一致问题外,还会面临其他三个问题,分别是缓存雪崩、缓存击穿、缓存穿透。这三个问题,一旦发生,会导致大量的请求积压到数据库。若并发量很大,就会导致数据库宕机或故…...
Leetcode—2670. 找出不同元素数目差数组【简单】
2024每日刷题(一零七) Leetcode—2670. 找出不同元素数目差数组 哈希表实现代码 class Solution { public:vector<int> distinctDifferenceArray(vector<int>& nums) {unordered_set<int> s;int n nums.size();vector<int&g…...
App ICP备案获取iOS和Android的公钥和证书指纹
依照《工业和信息化部关于开展移动互联网应用程序备案工作的通知》,向iOS和安卓平台提交App时需要先提交ICP备案信息。 iOS平台: 1、下载appuploader工具:Appuploader home -- A tool improve ios develop efficiency such as submit ipa to…...
猿创征文 | 项目整合KafkaStream实现文章热度实时计算
个人简介: > 📦个人主页:赵四司机 > 🏆学习方向:JAVA后端开发 > ⏰往期文章:SpringBoot项目整合微信支付 > 🔔博主推荐网站:牛客网 刷题|面试|找工作神器 > &#…...
状态压缩 笔记
棋盘式的f[i][j]中表示状态的j可以是状态本身也可以是在合法状态state中的下标 用状态本身比较方便,用下标比较省空间 用下标的话可以开id[M]数组记录一下 蒙德里安的梦想 求把 NM的棋盘分割成若干个 12的长方形,有多少种方案。 例如当 N2࿰…...
Java 数据结构篇-实现二叉搜索树的核心方法
🔥博客主页: 【小扳_-CSDN博客】 ❤感谢大家点赞👍收藏⭐评论✍ 文章目录 1.0 二叉搜索树的概述 2.0 二叉搜索树的成员变量及其构造方法 3.0 实现二叉树的核心接口 3.1 实现二叉搜索树 - 获取值 get(int key) 3.2 实现二叉搜索树 - 获取最小…...
go语言(二十一)---- channel的关闭
channel不像文件一样需要经常去关闭,只有当你确实没有任何发送数据了,或者你想显示的结束range循环之类的,才去关闭channel。关闭channel后,无法向channel再发送数据,(引发pannic错误后,导致接收…...
龙芯LS2K PMON启动全解析:从内核到U盘识别的奥秘
【龙芯LS2K PMON终极干货】整机设备启动全景图:从 mainbus 开机到 U 盘识别全流程 一、整篇总纲(最强一句话) 内核启动 → 读 ioconf.c/cfdata 硬件族谱 → 从根总线 mainbus 开始遍历 → 逐级 attach 设备 → 启动 PCI → 扫描到 OTG 控制器 → 加载 dwc2 驱动 → 开启 U…...
别再只用Selenium了!手把手教你用Python+UIAutomation+Unittest搭建Windows应用自动化测试框架
从Selenium到UIAutomation:Windows GUI自动化测试实战进阶指南 当Web自动化测试工程师首次接触Windows桌面应用测试时,往往会陷入工具选择的困境。传统基于坐标操作的自动化方案难以应对动态界面变化,而商业工具又存在学习成本高、灵活性不足…...
保姆级教程:在RK3588开发板上用Python部署NanoTrack,实测120FPS真香
保姆级教程:在RK3588开发板上用Python部署NanoTrack,实测120FPS真香 RK3588作为当前嵌入式AI领域的旗舰级芯片,其强大的NPU算力让边缘设备也能流畅运行复杂的视觉算法。本文将手把手带你完成NanoTrack模型从转换到部署的全流程,实…...
软件测试行业的技术创新:有哪些新兴技术将影响测试行业
一、AI驱动的智能测试:从辅助工具到核心引擎在2026年的软件测试领域,人工智能已经从概念验证阶段全面迈入深度落地期,成为驱动测试效能提升的核心引擎。AI驱动的智能测试正在从多个维度重构传统测试范式。(一)自动化测…...
CANN/cannbot-skills Skill测试框架
Skill 测试框架 【免费下载链接】cannbot-skills CANNBot 是面向 CANN 开发的用于提升开发效率的系列智能体,本仓库为其提供可复用的 Skills 模块。 项目地址: https://gitcode.com/cann/cannbot-skills 基于变更文件识别受影响的 skills,执行对应…...
YOLOv11光伏板二极管异常目标检测数据集-45张-Solar-panel-anomalies-1
YOLOv11光伏板二极管异常目标检测数据集 📊 数据集基本信息 目标类别: [‘Diode anomaly’, ‘Hot Spots’, ‘Reverse polarity’]中文类别:[‘二极管异常’, ‘热点’, ‘反向极性’]训练集:31 张验证集:9 张测试集&…...
Q学习入门:用DQN训练乒乓AI的原理与实操
1. 项目概述:从乒乓游戏切入,理解Q学习如何让AI学会“思考下一步”你有没有试过盯着一个简单的乒乓球游戏界面发呆?球正朝右下角飞来,挡板在屏幕左侧,此时你的手指悬在键盘上方——是按上、按下,还是不动&a…...
2026年免费照片去水印软件App排行榜|去水印App推荐和评测指南
照片被水印困扰是很多用户的常见问题。无论是保存网络上的精美图片、处理工作资料,还是制作个人素材库,去水印都是一个实用的需求。本篇文章根据2026年最新的工具体验,为你梳理免费照片去水印软件app有哪些、各类去水印App怎么选择࿰…...
如何快速掌握基因引物设计:Primer3-py 的完整入门指南
如何快速掌握基因引物设计:Primer3-py 的完整入门指南 【免费下载链接】primer3-py Simple oligo analysis and primer design 项目地址: https://gitcode.com/gh_mirrors/pr/primer3-py 在分子生物学研究中,高效准确的引物设计是实验成功的关键。…...
CANN/asc-devkit算子动态库配置
KernelSo 【免费下载链接】asc-devkit 本项目是CANN 推出的昇腾AI处理器专用的算子程序开发语言,原生支持C和C标准规范,主要由类库和语言扩展层构成,提供多层级API,满足多维场景算子开发诉求。 项目地址: https://gitcode.com/c…...
