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>

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

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

相关文章

问题:第十三届全国人民代表大会第四次会议召开的时间是()。 #经验分享#知识分享#媒体

问题&#xff1a;第十三届全国人民代表大会第四次会议召开的时间是&#xff08;&#xff09;。 A. 2018年3月3日至3月11日 B. 2019年3月5日至3月11日 C. 2020年3月5日至3月11日 D. 2021年3月5日至3月11日 参考答案如图所示 问题&#xff1a;顾客满意是顾客对一件产品满足…

失物招领|基于Springboot的校园失物招领系统设计与实现(源码+数据库+文档)

校园失物招领系统目录 目录 基于Springboot的校园失物招领系统设计与实现 一、前言 二、系统功能设计 三、系统实现 1、 管理员功能实现 (1) 失物招领管理 (2) 寻物启事管理 (3) 公告管理 (4) 公告类型管理 2、用户功能实现 (1) 失物招领 (2) 寻物启事 (3) 公告 …

[ARC145E] Adjacent XOR 题解

推荐在 cnblogs 上阅读。 [ARC145E] Adjacent XOR 题解 这道题真的是道神仙题&#xff0c;是那种考场想不出来、补题也补得十分艰难的题。可能我还是太菜了。 看了 APJ 大神的题解&#xff0c;琢磨很久才懂。为了帮助像我一样的同学&#xff0c;特地写一篇题解。 这是 2 月…

Centos7环境安装PHP8

一、安装必要的模块 yum install -y bzip2-devel libcurl-devel libxml2-devel sqlite-devel oniguruma oniguruma-devel libxml2 libxml2-devel bzip2 bzip2-devel libcurl libcurl-devel libjpeg libjpeg-devel zstd libzstd-devel curl libcurl-devel libpng libpng-devel …

AI大模型开发架构设计(8)——从 AI 编程助手到 AI Agent 应用实战

文章目录 从 AI 编程助手到 AI Agent 应用实战1 AI Agent是什么?和AI编程如何协同?AI Agent是什么?AI Agent 案例AI Agent 三种范式AI Agent 和 AI 编程如何协同?2 AGI/LLM/Lightweight AI Agent剖析AGI AgentsLightweight AI Agents3 Lightweight AI Agent技术剖析技术架构…

【日常总结】宝塔中 Gitlab服务器 forbidden

一、场景 二、问题 三、原因 四、解决方案 五、实战 Stage 1&#xff1a;打开 /etc/gitlab/gitlab.rb&#xff0c;并编辑 Stage 2&#xff1a;重启gitlab服务 Stage 3&#xff1a;测试&#xff08;打开girlab网页&#xff09; 六、后续 一、场景 公司更换新电脑 服务…

使⽤COCO数据集训练YOLOX

注意&#xff1a; 训练的时候&#xff0c;如果GPU不够&#xff0c;可以修改batchsize大小。 (yolox) xuefeif123:/mnt/d/BaiduNetdiskDownload/CV/YOLOX$ ls LICENSE README.md assets checkpoints demo exps requirements.txt setup.py tools yolox M…

C语言——P/文件操作

一、为什么使用文件&#xff1f; 如果没有⽂件&#xff0c;我们写的程序的数据是存储在电脑的内存中&#xff0c;如果程序退出&#xff0c;内存回收&#xff0c;数据就丢失了&#xff0c;等再次运⾏程序&#xff0c;是看不到上次程序的数据的&#xff0c;如果要将数据进⾏持久…

[Git版本控制系统]

Git是一种版本控制系统&#xff0c;用于跟踪和控制计算机文件的更改。它具有以下几个基本概念&#xff1a; 仓库&#xff08;Repository&#xff09;&#xff1a;Git使用仓库来存储项目的所有文件和历史记录。仓库可以分为本地仓库和远程仓库。本地仓库存在于本地计算机上&…

数据结构—动态查找表

动态查找介绍 1. 动态查找的引入&#xff1a;当查找表以线性表的形式组织时&#xff0c;若对查找表进行插入、删除或排序操作&#xff0c;就必须移动大量的记录&#xff0c;当记录数很多时&#xff0c;这种移动的代价很大。 2. 动态查找表的设计思想&#xff1a;表结构本身是…

web前端开发--------阴影与转换

1.阴影分为文本阴影和盒子阴影 我们使用text-shadow属性为文本添加阴影效果&#xff0c;使用结构伪类为第一个子元素p添加阴影效果&#xff1b; 水平偏移量为负值时&#xff0c;表示阴影向左偏移&#xff1b; &#xfeff;垂直偏移量为负值时&#xff0c;表示阴影向上偏移。 …

【Vue】2-14、插槽 自定义指令

一、插槽 插槽&#xff08;Slot&#xff09;是 vue 为组件的封装者提供的能力。允许封装者在封装组件时&#xff0c;把不确定的&#xff0c;希望由用户指定的部分定义为插槽。 <template><div class"app-container"><h1>App 根组件</h1>&…

【Mysql】数据库架构学习合集

目录 1. Mysql整体架构1-1. 连接层1-2. 服务层1-3. 存储引擎层1-4. 文件系统层 2. 一条sql语句的执行过程2-1. 数据库连接池的作用2-2. 查询sql的执行过程2-1. 写sql的执行过程 1. Mysql整体架构 客户端&#xff1a; 由各种语言编写的程序&#xff0c;负责与Mysql服务端进行网…

go数据操作-elasticsearch

go-elasticsearch是Elasticsearch 官方提供的 Go 客户端。每个 Elasticsearch 版本会有一个对应的 go-elasticsearch 版本。 1.安装依赖 执行以下命令安装v8版本的 go 客户端。 go get github.com/elastic/go-elasticsearch/v8latest导入依赖。 import "github.com/el…

vue学习——elementPlus安装及国际化

引入完整的elementPlus 安装 pnpm i element-plus引入 // main.ts import { createApp } from vue import ElementPlus from element-plus import element-plus/dist/index.css import App from ./App.vueconst app createApp(App)app.use(ElementPlus) app.mount(#app)图标…

JAVA斗地主逻辑-控制台版

未排序版&#xff1a; 准备牌->洗牌 -> 发牌 -> 看牌: App程序入口&#xff1a; package doudihzu01;public class App {public static void main(String[] args) {/*作为斗地主程序入口这里不写代码逻辑*///无参创建对象&#xff0c;作为程序启动new PokerGame();…

大力说视频号第二课:视频号如何挂链接带货

最近&#xff0c;随着视频号带货的风潮&#xff0c;不少小伙伴已经成功跟上潮流&#xff0c;在这个平台上轻松赚取收入。 然而&#xff0c;仍有不少小伙伴对于如何在视频号中挂链接带货感到有些困惑。 目前&#xff0c;视频号的主流带货方式主要分为三种&#xff1a; 01 挂“…

(每日持续更新)信息系统项目管理(第四版)(高级项目管理)考试重点整理第9章 项目范围管理(四)

博主2023年11月通过了信息系统项目管理的考试&#xff0c;考试过程中发现考试的内容全部是教材中的内容&#xff0c;非常符合我学习的思路&#xff0c;因此博主想通过该平台把自己学习过程中的经验和教材博主认为重要的知识点分享给大家&#xff0c;希望更多的人能够通过考试&a…

回归预测 | Matlab实现CPO-LSTM【24年新算法】冠豪猪优化长短期记忆神经网络多变量回归预测

回归预测 | Matlab实现CPO-LSTM【24年新算法】冠豪猪优化长短期记忆神经网络多变量回归预测 目录 回归预测 | Matlab实现CPO-LSTM【24年新算法】冠豪猪优化长短期记忆神经网络多变量回归预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.Matlab实现CPO-LSTM【24年新算…

QT 范例阅读: undoframework

一、功能 通过给 QGraphicsScene 添加、删除、移动 QGraphicsPolygonItem 来演示 撤销重做功能 标签 undo framework example 二、核心代码&#xff0c;以添加图例为例 MainWindow.cpp 的核心代码 //1 创建堆栈 undoStack new QUndoStack(this); //2 以列表的形式显…