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

EasyExcel(读取操作和填充操作)

文章目录

    • 1.准备Read.xlsx(具有两个sheet)
    • 2.读取第一个sheet中的数据
        • 1.模板
        • 2.方法
        • 3.结果
    • 3.读取所有sheet中的数据
        • 1.模板
        • 2.方法
        • 3.结果
  • EasyExcel填充
    • 1.简单填充
        • 1.准备 Fill01.xlsx
        • 2.无模版
        • 3.方法
        • 4.结果
    • 2.列表填充
        • 1.准备 Fill02.xlsx
        • 2.模板
        • 3.方法
        • 4.结果
    • 3.组合填充
        • 1.准备 Fill03.xlsx
        • 2.模板
        • 3.方法
        • 4.结果
    • 4.水平填充
        • 1.准备 Fill04.xlsx
        • 2.模板
        • 3.方法
        • 4.结果

1.准备Read.xlsx(具有两个sheet)

CleanShot 2024-10-30 at 16.18.36@2x

2.读取第一个sheet中的数据

1.模板
@NoArgsConstructor
@AllArgsConstructor
@Data
@Builder
public static class DemoData {// 根据Excel中指定列名或列的索引读取@ExcelProperty(value = "字符串标题")private String name;@ExcelProperty(value = "日期标题")private Date hireDate;@ExcelProperty(value = "数字标题")private Double salary;
}
2.方法
/*** 读取第一个sheet中的数据*/
@Test
public void testRead01() {// 读取文件路径String fileName = "/Users/sunxiansheng/IdeaProjects/demo/easyexcel-demo/src/main/resources/Read.xlsx";// 存储解析的数据List<DemoData> demoDataArrayList = new ArrayList<>();// 1.创建readExcelReader excelReader = EasyExcel.read(fileName).build();// 2.创建sheetReadSheet sheetOne = EasyExcel.readSheet(0).head(DemoData.class).registerReadListener(new AnalysisEventListener<DemoData>() {@Overridepublic void invoke(DemoData demoData, AnalysisContext analysisContext) {demoDataArrayList.add(demoData);}@Overridepublic void doAfterAllAnalysed(AnalysisContext analysisContext) {System.out.println("解析完成一个sheet...");}}).build();// 参数为可变参数,可以读取多个sheetexcelReader.read(sheetOne);// 必须关闭流,否则会出现内存泄漏excelReader.finish();// 输出所有解析的数据System.out.println("所有解析的数据为:");demoDataArrayList.forEach(System.out::println);
}
3.结果

CleanShot 2024-10-30 at 16.28.03@2x

3.读取所有sheet中的数据

1.模板
@NoArgsConstructor
@AllArgsConstructor
@Data
@Builder
public static class DemoData {// 根据Excel中指定列名或列的索引读取@ExcelProperty(value = "字符串标题")private String name;@ExcelProperty(value = "日期标题")private Date hireDate;@ExcelProperty(value = "数字标题")private Double salary;
}
2.方法
/*** 读取所有sheet中的数据*/
@Test
public void testRead02() {// 读取文件路径String fileName = "/Users/sunxiansheng/IdeaProjects/demo/easyexcel-demo/src/main/resources/Read.xlsx";// 存储解析的数据List<DemoData> demoDataArrayList = new ArrayList<>();// 直接使用EasyExcel读取excelExcelReader excelReader = EasyExcel.read(fileName, DemoData.class, new AnalysisEventListener<DemoData>() {// 每解析一行数据,该方法会被调用一次@Overridepublic void invoke(DemoData demoData, AnalysisContext analysisContext) {demoDataArrayList.add(demoData);}// 解析完成一个sheet后被调用@Overridepublic void doAfterAllAnalysed(AnalysisContext analysisContext) {System.out.println("解析完成一个sheet...");// 可以将解析的数据保存到数据库}}).build();excelReader.readAll(); // 读所有sheet// 必须关闭流,否则会出现内存泄漏excelReader.finish();// 输出所有解析的数据System.out.println("所有解析的数据为:");demoDataArrayList.forEach(System.out::println);
}
3.结果

CleanShot 2024-10-30 at 16.27.38@2x

EasyExcel填充

1.简单填充

1.准备 Fill01.xlsx

CleanShot 2024-10-30 at 16.32.41@2x

2.无模版
3.方法
/*** 简单填充*/
@Test
public void testFill01() {// 选择要填充的模板String templateFileName = "/Users/sunxiansheng/IdeaProjects/demo/easyexcel-demo/src/main/resources/Fill01.xlsx";// 选择填充后的文件String filledFileName = "/Users/sunxiansheng/IdeaProjects/demo/easyexcel-demo/src/main/resources/Fill01_end.xlsx";// 1.创建writeExcelWriter excelWriter = EasyExcel.write(filledFileName).withTemplate(templateFileName).build();// 2.创建sheetWriteSheet writeSheet = EasyExcel.writerSheet().sheetNo(0).build();// 3.构建数据Map<String, Object> data = new HashMap<>();data.put("name", "张三");data.put("age", 20);data.put("birthday", new Date());// 4.填充数据excelWriter.fill(data, writeSheet);// 5.关闭流excelWriter.finish();
}
4.结果

CleanShot 2024-10-30 at 16.46.44@2x

2.列表填充

1.准备 Fill02.xlsx

2.模板
    @Data@Builder@NoArgsConstructor@AllArgsConstructorpublic static class Fill02 {private String name;private Double number;}
3.方法
    /*** 列表填充*/@Testpublic void testFill02() {// 选择要填充的模板String templateFileName = "/Users/sunxiansheng/IdeaProjects/demo/easyexcel-demo/src/main/resources/Fill02.xlsx";// 选择填充后的文件String filledFileName = "/Users/sunxiansheng/IdeaProjects/demo/easyexcel-demo/src/main/resources/Fill02_end.xlsx";// 1.创建writeExcelWriter excelWriter = EasyExcel.write(filledFileName).withTemplate(templateFileName).build();// 2.创建sheetWriteSheet writeSheet = EasyExcel.writerSheet().sheetNo(0).build();// 3.构建数据List<Fill02> data = new ArrayList<>();data.add(Fill02.builder().name("张三").number(100.0).build());data.add(Fill02.builder().name("李四").number(200.0).build());data.add(Fill02.builder().name("王五").number(300.0).build());// 4.填充数据excelWriter.fill(data, writeSheet);// 5.关闭流excelWriter.finish();}
4.结果

CleanShot 2024-10-30 at 17.01.37@2x

3.组合填充

1.准备 Fill03.xlsx

CleanShot 2024-10-30 at 17.26.36@2x

2.模板
    @Data@Builder@NoArgsConstructor@AllArgsConstructorpublic static class Fill03 {private String name;private Integer age;}
3.方法
/*** 组合填充*/
@Test
public void testFill03() {// 选择要填充的模板String templateFileName = "/Users/sunxiansheng/IdeaProjects/demo/easyexcel-demo/src/main/resources/Fill03.xlsx";// 选择填充后的文件String filledFileName = "/Users/sunxiansheng/IdeaProjects/demo/easyexcel-demo/src/main/resources/Fill03_end.xlsx";// 1.创建writeExcelWriter excelWriter = EasyExcel.write(filledFileName).withTemplate(templateFileName).build();// 2.创建sheetWriteSheet writeSheet = EasyExcel.writerSheet().sheetNo(0).build();// 3.构建数据// 3.1 构建数据1Map<String, Object> data1 = new HashMap<>();data1.put("time", new Date());data1.put("num", 2);// 3.2 构建数据2List<Fill03> data2 = new ArrayList<>();data2.add(Fill03.builder().name("张三").age(20).build());data2.add(Fill03.builder().name("李四").age(21).build());// 填充配置,换行填充(混合填充必备配置)FillConfig fillConfig = FillConfig.builder().forceNewRow(Boolean.TRUE).build();// 4.填充数据excelWriter.fill(data1, fillConfig, writeSheet);excelWriter.fill(data2, fillConfig, writeSheet);// 5.关闭流excelWriter.finish();
}
4.结果

CleanShot 2024-10-30 at 17.33.55@2x

4.水平填充

1.准备 Fill04.xlsx

2.模板
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public static class Fill04 {private String name;private Integer age;
}
3.方法
    /*** 水平填充*/@Testpublic void testFill04() {// 选择要填充的模板String templateFileName = "/Users/sunxiansheng/IdeaProjects/demo/easyexcel-demo/src/main/resources/Fill04.xlsx";// 选择填充后的文件String filledFileName = "/Users/sunxiansheng/IdeaProjects/demo/easyexcel-demo/src/main/resources/Fill04_end.xlsx";// 1.创建writeExcelWriter excelWriter = EasyExcel.write(filledFileName).withTemplate(templateFileName).build();// 2.创建sheetWriteSheet writeSheet = EasyExcel.writerSheet().sheetNo(0).build();// 3.构建数据List<Fill04> data = new ArrayList<>();data.add(Fill04.builder().name("张三").age(20).build());data.add(Fill04.builder().name("李四").age(21).build());// 填充配置,水平填充FillConfig fillConfig = FillConfig.builder().direction(WriteDirectionEnum.HORIZONTAL).build();// 4.填充数据excelWriter.fill(data, fillConfig, writeSheet);// 5.关闭流excelWriter.finish();}
4.结果

CleanShot 2024-10-30 at 17.34.12@2x

相关文章:

EasyExcel(读取操作和填充操作)

文章目录 1.准备Read.xlsx&#xff08;具有两个sheet&#xff09;2.读取第一个sheet中的数据1.模板2.方法3.结果 3.读取所有sheet中的数据1.模板2.方法3.结果 EasyExcel填充1.简单填充1.准备 Fill01.xlsx2.无模版3.方法4.结果 2.列表填充1.准备 Fill02.xlsx2.模板3.方法4.结果 …...

【华为OD-E卷 - 机房布局 100分(python、java、c++、js、c)】

【华为OD-E卷 - 机房布局 100分&#xff08;python、java、c、js、c&#xff09;】 题目 小明正在规划一个大型数据中心机房&#xff0c;为了使得机柜上的机器都能正常满负荷工作&#xff0c;需要确保在每个机柜边上至少要有一个电箱。 为了简化题目&#xff0c;假设这个机房…...

【竞技宝】LOL:IG新赛季分组被质疑

北京时间2024年12月31日&#xff0c;今天已经2024年的最后一天&#xff0c;在进入一月之后&#xff0c;英雄联盟将迎来全新的2025赛季。而目前新赛季第一阶段的抽签结果已经全部出炉&#xff0c;其中人气最高的IG战队在本次抽签中抽到了“绝世好签”引来了网友们的质疑。 首先介…...

ChatBI来啦!NBAI 正式上线 NL2SQL 功能

NebulaAI 现已正式上线 NL2SQL 功能&#xff0c;免费开放使用&#xff01; 什么是 NL2SQL&#xff1f;NL2SQL 即通过自然语言交互&#xff0c;用户可以轻松查询、分析和管理数据库中的数据&#xff08;ChatBI&#xff09;&#xff0c;从此摆脱传统复杂的数据库操作。 欢迎免费…...

8. Web应用程序(Web)

8. Web应用程序&#xff08;Web&#xff09; Spring Boot 非常适用于Web应用程序开发。你可以使用嵌入式 Tomcat、Jetty、Undertow或Netty创建一个独立的HTTP服务器。大多是Web应用程序都会使用 spring-boot-starter-web 依赖模块来快速启动和运行项目。你也可以选择使用 spri…...

Linux内核修改内存分配策略

今天遇到了如下的内核报错 Java HotSpot(TM) 64-Bit Server VM warning: INFO: os::commit_memory(0x00007f0e1e06c000, 65536, 1) failed; errorCannot allocate memory (errno12)这个报错是因为&#xff0c;linux会对大部分的内存资源申请都回复允许&#xff0c;以便于运行更…...

六大亮点解析:AI视频监控助力部队训练安全管理

一、用户痛点&#xff1a; 在部队的日常训练和任务执行中&#xff0c;官兵的安全始终是最为重要的保障。然而&#xff0c;传统的监控方式存在显著的局限性&#xff0c;尤其是在高强度、长时间的训练过程中&#xff0c;人工值守监控容易产生疲劳&#xff0c;误判的风险大&#…...

【从零开始入门unity游戏开发之——C#篇33】C#委托(`Delegate`)和事件(`event` )、事件与委托的区别、Invoke()的解释

文章目录 一、委托&#xff08;Delegate&#xff09;1、什么是委托&#xff1f;2、委托的基本语法3、定义自定义委托4、如何使用自定义委托5、多播委托6、C# 中的系统委托7、GetInvocationList 获取多个函数返回值8、总结 二、事件&#xff08;event &#xff09;1、事件是什么…...

大数据与机器学习(它们有何关系?)

想了解大数据和机器学习吗&#xff1f;我们将为你解释它们是什么、彼此之间有何关联&#xff0c;以及它们为何在数据密集型应用中如此重要。 大数据和机器学习是如何相互关联的&#xff1f; 大数据指的是传统存储方法无法处理的海量数据。机器学习则是计算机系统从观察结果和…...

深入浅出 Spring(一) | Spring简介、IOC理论推导、快速上手 Spring

1. spring 1.1 简介 Spring : 春天 —>给软件行业带来了春天 2002年&#xff0c;Rod Jahnson首次推出了Spring框架雏形interface21框架。 2004年3月24日&#xff0c;Spring框架以interface21框架为基础&#xff0c;经过重新设计&#xff0c;发布了1.0正式版。 很难想象…...

IDEA 社区版 SpringBoot不能启动

报错原因&#xff0c;Failed to load class [javax.servlet.Filter] <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-tomcat</artifactId><scope>provided</scope> </dependency>…...

职场常用Excel基础01-数据验证

大家好&#xff0c;excel在职场中使用非常频繁&#xff0c;今天和大家一起分享一下excel中数据验证相关的内容~ 在Excel中&#xff0c;数据验证&#xff08;Data Validation&#xff09;是一项非常有用的功能&#xff0c;它可以帮助用户限制输入到单元格中的数据类型和范围&am…...

活动预告 |【Part1】Microsoft Azure 在线技术公开课:数据基础知识

课程介绍 参加“Azure 在线技术公开课&#xff1a;数据基础知识”活动&#xff0c;了解有关云环境和数据服务中核心数据库概念的基础知识。通过本次免费的介绍性活动&#xff0c;你将提升在关系数据、非关系数据、大数据和分析方面的技能。 活动时间&#xff1a;01 月 07 日…...

RabbitMQ - 1 ( 7000 字 RabbitMQ 入门级教程 )

一&#xff1a; 在互联网行业&#xff0c;许多公司喜欢用动物命名产品或作为公司的 Logo 和吉祥物&#xff0c;比如腾讯的企鹅、京东的狗、美团的袋鼠、携程的海豚&#xff0c;而阿里更是凭借蚂蚁、飞猪、天猫、菜鸟、闲鱼、盒马等&#xff0c;打造了一座“动物园”。Rabbit&a…...

Docker Compose 构建 EMQX 集群 实现mqqt 和websocket

EMQX 集群化管理mqqt真香 目录 #目录 /usr/emqx 容器构建 vim docker-compose.yml version: 3services:emqx1:image: emqx:5.8.3container_name: emqx1environment:- "EMQX_NODE_NAMEemqxnode1.emqx.io"- "EMQX_CLUSTER__DISCOVERY_STRATEGYstatic"- …...

Spring 过滤器:OncePerRequestFilter 应用详解

在Web应用中&#xff0c;过滤器&#xff08;Filter&#xff09;是一个强大的工具&#xff0c;它可以在请求到达目标资源之前或响应返回客户端之前对请求或响应进行拦截和处理。然而&#xff0c;在某些情况下&#xff0c;我们可能希望确保过滤器逻辑在一次完整的HTTP请求中仅执行…...

3.CSS字体属性

3.1字体系列 CSS使用font-family属性定义文本的字体系列。 p{font-family:"微软雅黑"} div{font-family:Arial,"Microsoft Yahei",微软雅黑} 3.2字体大小 css使用font-size属性定义字体大小 p{ font-size:20px; } px(像素)大小是我们网页的最常用的单…...

微信小程序 单选多选radio/checkbox 纯代码分享

单选按钮 <radio-group class"radiogroup" bindchange"radioChange"> <label class"radio" wx:for"{{items}}"> <radio value"{{item.name}}" checked"{{item.checked}}" /> {{item.value}} &…...

k8s 部署meilisearch UI

https://github.com/riccox/meilisearch-ui 拉取镜像 sudo docker pull riccoxie/meilisearch-ui:latestk8s 部署 apiVersion: v1 kind: Service metadata:name: meilisearch-uinamespace: meilisearch spec:type: NodePortselector:app: meilisearch-uiports:- port: 24900…...

gitlab 还原合并请求

事情是这样的&#xff1a; 菜鸡从 test 分支切了个名为 pref-art 的分支出来&#xff0c;发布后一机灵&#xff0c;发现错了&#xff0c;于是在本地用 git branch -d pref-art 将该分支删掉了。之后切到了 prod 分支&#xff0c;再切出了一个相同名称的 pref-art 分支出来&…...

Ubuntu系统下交叉编译openssl

一、参考资料 OpenSSL&&libcurl库的交叉编译 - hesetone - 博客园 二、准备工作 1. 编译环境 宿主机&#xff1a;Ubuntu 20.04.6 LTSHost&#xff1a;ARM32位交叉编译器&#xff1a;arm-linux-gnueabihf-gcc-11.1.0 2. 设置交叉编译工具链 在交叉编译之前&#x…...

蓝桥杯 2024 15届国赛 A组 儿童节快乐

P10576 [蓝桥杯 2024 国 A] 儿童节快乐 题目描述 五彩斑斓的气球在蓝天下悠然飘荡&#xff0c;轻快的音乐在耳边持续回荡&#xff0c;小朋友们手牵着手一同畅快欢笑。在这样一片安乐祥和的氛围下&#xff0c;六一来了。 今天是六一儿童节&#xff0c;小蓝老师为了让大家在节…...

全球首个30米分辨率湿地数据集(2000—2022)

数据简介 今天我们分享的数据是全球30米分辨率湿地数据集&#xff0c;包含8种湿地亚类&#xff0c;该数据以0.5X0.5的瓦片存储&#xff0c;我们整理了所有属于中国的瓦片名称与其对应省份&#xff0c;方便大家研究使用。 该数据集作为全球首个30米分辨率、覆盖2000–2022年时间…...

三体问题详解

从物理学角度&#xff0c;三体问题之所以不稳定&#xff0c;是因为三个天体在万有引力作用下相互作用&#xff0c;形成一个非线性耦合系统。我们可以从牛顿经典力学出发&#xff0c;列出具体的运动方程&#xff0c;并说明为何这个系统本质上是混沌的&#xff0c;无法得到一般解…...

成都鼎讯硬核科技!雷达目标与干扰模拟器,以卓越性能制胜电磁频谱战

在现代战争中&#xff0c;电磁频谱已成为继陆、海、空、天之后的 “第五维战场”&#xff0c;雷达作为电磁频谱领域的关键装备&#xff0c;其干扰与抗干扰能力的较量&#xff0c;直接影响着战争的胜负走向。由成都鼎讯科技匠心打造的雷达目标与干扰模拟器&#xff0c;凭借数字射…...

【Linux】Linux 系统默认的目录及作用说明

博主介绍&#xff1a;✌全网粉丝23W&#xff0c;CSDN博客专家、Java领域优质创作者&#xff0c;掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域✌ 技术范围&#xff1a;SpringBoot、SpringCloud、Vue、SSM、HTML、Nodejs、Python、MySQL、PostgreSQL、大数据、物…...

【若依】框架项目部署笔记

参考【SpringBoot】【Vue】项目部署_no main manifest attribute, in springboot-0.0.1-sn-CSDN博客 多一个redis安装 准备工作&#xff1a; 压缩包下载&#xff1a;http://download.redis.io/releases 1. 上传压缩包&#xff0c;并进入压缩包所在目录&#xff0c;解压到目标…...

Copilot for Xcode (iOS的 AI辅助编程)

Copilot for Xcode 简介Copilot下载与安装 体验环境要求下载最新的安装包安装登录系统权限设置 AI辅助编程生成注释代码补全简单需求代码生成辅助编程行间代码生成注释联想 代码生成 总结 简介 尝试使用了Copilot&#xff0c;它能根据上下文补全代码&#xff0c;快速生成常用…...

【技巧】dify前端源代码修改第一弹-增加tab页

回到目录 【技巧】dify前端源代码修改第一弹-增加tab页 尝试修改dify的前端源代码&#xff0c;在知识库增加一个tab页"HELLO WORLD"&#xff0c;完成后的效果如下 [gif01] 1. 前端代码进入调试模式 参考 【部署】win10的wsl环境下启动dify的web前端服务 启动调试…...

简约商务通用宣传年终总结12套PPT模版分享

IOS风格企业宣传PPT模版&#xff0c;年终工作总结PPT模版&#xff0c;简约精致扁平化商务通用动画PPT模版&#xff0c;素雅商务PPT模版 简约商务通用宣传年终总结12套PPT模版分享:商务通用年终总结类PPT模版https://pan.quark.cn/s/ece1e252d7df...