EasyExcel-读取多个sheet的方法

Easyexcel读取单/多sheet页 此文档会说明单个和多个的sheet页的读取方法,包括本人在使用过程中的踩坑点。依赖不会的自行百度导入,话不多说,直接上干货。以下示例基于2.x,新版本基本类似。 阅读详情
主要代码
  • 下面的is:是你导入的excel文件

ByteArrayInputStream is = new ByteArrayInputStream(new byte[1024]);
EasyExcel.read(is, new ExcelListener())
.excelType(ExcelTypeEnum.XLSX)
.doReadAll();
监听器(ExcelListener)
  • 需要自定义监听器
  • 每个sheet读取一次,监听器会运行一次(创建一个监听器对象)
  • 我们 extends AnalysisEventListener<Map<Integer, Object>> 的监听器,可以让导入的数据有编号,而且是map格式的,就不用java对象去接收

package com.cc.eed.service.impl;
import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;
import com.alibaba.excel.read.listener.ReadListener;
import java.util.Map;
/**
* <p></p>
*
* @author --
* @since 2024/12/25
*/
public class ExcelListener extends AnalysisEventListener<Map<Integer, Object>> {
//可以获取当前sheet的名字,最开始执行
@Override
public void invokeHeadMap(Map<Integer, String> headMap, AnalysisContext context) {
super.invokeHeadMap(headMap, context);
}
//读取数据,有一条运行一次
@Override
public void invoke(Map<Integer, Object> integerObjectMap, AnalysisContext analysisContext) {
}
//解析完当前sheet运行
@Override
public void doAfterAllAnalysed(AnalysisContext analysisContext) {
}
}
监听器,可以参考管网的:最简单的监听器

// 有个很重要的点 DemoDataListener 不能被spring管理,要每次读取excel都要new,然后里面用到spring可以构造方法传进去
@Slf4j
public class DemoDataListener implements ReadListener<DemoData> {
/**
* 每隔5条存储数据库,实际使用中可以100条,然后清理list ,方便内存回收
*/
private static final int BATCH_COUNT = 100;
/**
* 缓存的数据
*/
private List<DemoData> cachedDataList = ListUtils.newArrayListWithExpectedSize(BATCH_COUNT);
/**
* 假设这个是一个DAO,当然有业务逻辑这个也可以是一个service。当然如果不用存储这个对象没用。
*/
private DemoDAO demoDAO;
public DemoDataListener() {
// 这里是demo,所以随便new一个。实际使用如果到了spring,请使用下面的有参构造函数
demoDAO = new DemoDAO();
}
/**
* 如果使用了spring,请使用这个构造方法。每次创建Listener的时候需要把spring管理的类传进来
*
* @param demoDAO
*/
public DemoDataListener(DemoDAO demoDAO) {
this.demoDAO = demoDAO;
}
/**
* 这个每一条数据解析都会来调用
*
* @param data one row value. Is is same as {@link AnalysisContext#readRowHolder()}
* @param context
*/
@Override
public void invoke(DemoData data, AnalysisContext context) {
log.info("解析到一条数据:{}", JSON.toJSONString(data));
cachedDataList.add(data);
// 达到BATCH_COUNT了,需要去存储一次数据库,防止数据几万条数据在内存,容易OOM
if (cachedDataList.size() >= BATCH_COUNT) {
saveData();
// 存储完成清理 list
cachedDataList = ListUtils.newArrayListWithExpectedSize(BATCH_COUNT);
}
}
/**
* 所有数据解析完成了 都会来调用
*
* @param context
*/
@Override
public void doAfterAllAnalysed(AnalysisContext context) {
// 这里也要保存数据,确保最后遗留的数据也存储到数据库
saveData();
log.info("所有数据解析完成!");
}
/**
* 加上存储数据库
*/
private void saveData() {
log.info("{}条数据,开始存储数据库!", cachedDataList.size());
demoDAO.save(cachedDataList);
log.info("存储数据库成功!");
}
实战演练,Java用EasyExcel读取多个Sheet页分批处理 之前做了一个小工具用作数据比对,结果明细是导出到Excel中的,现在新需求要把这些数据存储到数据库中(┓(;´_`)┏),一个Excel文件有多个Sheet页需要录入到不同表中。不多说,还是利用EasyExcel做处理!文章没有贴出实体类代码,若不用注解则根据列下标顺序写实体类即可。 阅读详情

相关推荐

Java实现多个sheet导入

easyExcel的多sheet导入

qq_45295297的博客 2400

EasyExcel读取多个Sheet页数据

使用EasyExcel一次性读取多个sheet页,通过EasyExcel.readSheet方法指定读取sheet页的下标,这里的sheet下标是从0开始的,可通过headRowNumber指定从哪一行开始读取,下标也是从0开始,如果表头是第一行,此时指定headRowNumber(0),此时会把表头也读取出来。不同的sheet页在读取的时候可配置不同的监听器。...

qq_43750656的博客 1万+

springboot结合Easyexcel的使用(详细介绍Easyexcel)小白入门到精通

一、为什么用它? 由于apache poi和jxl,excelPOI都有一个严重的问题,就是非常消耗内存,特别处理数据量多时,速度慢并且时有异常发生,所以改用由阿里研发的easyExcel更可靠一些,它的官方建议对于1000行以内的采用原来poi的写法一次读写,但于1000行以上的数据,有用了一行行进行解析的方案,这样避免了内存的溢出。 二、easyExcel主要功能: 1.支持E...

李浪 的博客 8188

EasyExcel如何读取全部Sheet页数据方法

Excel表格里面大约有20个sheet页,每个sheet页65535条数据,需要读取全部数据,并导入至数据库。找了好多种方式,EasyExcel比较符合,下面看代码。

m0_60769905的博客 9044

海康安防平台接口调试指南:从签名生成到Vue项目集成

本文详细解析了海康安防平台接口认证规则,从签名生成到Vue项目集成的完整流程。通过核心机制解析、签名工具使用技巧及Vue项目中的优雅集成方案,帮助开发者高效完成接口调试,避免常见问题。特别适合需要将海康安防平台接口集成到Vue项目中的开发者参考。

weixin_42533120的博客 438

STM32 I²C外设深度解析:时序配置、主从模式与可靠性工程

I²C是一种广泛应用于嵌入式系统的同步串行总线协议,其核心在于精确的时序控制与可靠的电气特性匹配。理解SCL/SDA信号建立/保持时间、上升下降沿约束及硬件滤波机制,是保障通信稳定的基础;STM32通过I2C_TIMINGR寄存器实现对PRESC、SCLH、SCLL、SDADEL和SCLDEL等关键参数的精细调控,直接影响tSU:DAT、tVD:DAT等标准时序合规性;该能力支撑工业级高可靠场景下的主从双向通信、时钟拉伸管理与错误恢复;本文聚焦STM32平台,结合寄存器级配置、状态机行为与实战调试经验,系统

weixin_42146230的博客 87

Java 使用EasyExcel读取Excel中多个sheet方法及示例代码

本文主要介绍Java中,使用EasyExcel读取Excel文件中多个Sheet的方法,以及使用示例代码。 1、读取数据的实体对象 @Data public class DemoData { private String string; private Date date; private Double doubleData; } 2、保存数据的Listener(监听器) // 有个很重要的点 DemoDataListener 不能被spring管理,要每次读取ex.

b_just的博客 2万+

matlab实现MSK调制解调

文章目录一、要求二、设计三、代码四、结果五、结论 一、要求 画出MSK信号产生的信息、I路、Q路信号对比图以及接收端解调的信息恢复的对比图。 二、设计 1.MSK调制 2.MSK解调 三、代码 clear all;clc; N=20; T=1; fc=10; Fs=100; bitstream=randi([0,1],1,N); bitstream1=2*bitstream-1; b0=1; for i=1:N encode_output(i)=b0*bitstream

Time_book的博客 1万+

EasyExcel读取多个Sheet并实现事务保存

通过EasyExcel读取多个Sheet和MybatisPlus批量保存读取的数据,并且通过PlatformTransactionManager管理事务

qq_43534244的博客 1391

Xilinx系列学习(一) BRAM的使用,并用PL读取BRAM数据

Xilinx系列学习(一) BRAM的使用,并用PL读取BRAM数据一,Xilinx BRAM介绍二,BRAM对应的IP核调用和使用1,BRAM对应的IP核介绍2,BMG例化IP核的调用 一,Xilinx BRAM介绍 BRAM 就是Block Memory,是Zynq的PL端的存储RAM单元。可以利用BRAM,在PS和PL之间进行数据的交换。Zynq中还有一类存储器,称为分布式随机访问存储器(D...

weixin_43941525的博客 3万+

别再盯着那 100 条数据了,RAP OData 分页机制到底在保护什么

摘要: SAP BTP ABAP Environment 的 OData 服务默认采用分页保护机制,未指定 $top 时仅返回100条数据并附带下一页链接。这种设计旨在防止资源滥用,而非服务故障。客户端应遵循OData协议规范,直接使用服务端返回的 next link 进行分页请求,而非自行构造URL。当指定 $top 参数时,若数值超过5000仍会被强制分页。该机制在SAPUI5控件中被自动处理,但自定义客户端需主动实现分页逻辑。对于自定义实体(Custom Entity),开发者需在Query Prov

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 861

EasyExcel写入和读取多个sheet

最近在工作中,作者频频接触到Excel处理,因此也对EasyExcel进行了一定的研究和学习,也曾困扰过如何处理多个sheet,因此此处分享给大家,希望能有所帮助。

2301_76632762的博客 4659

innovus获取mem pin shape box脚本

innovus mem 的pin shae只能通过attitude editor看属性获取其pin shape的box,但是想用脚本处理一定box时,没有别的办法能直接获取box属性。我正在「拾陆楼」和朋友们讨论有趣的话题,你⼀起来吧?

m0_61544122的博客 1108

使用EasyExcel 根据模板导出多个Sheet格式相同内容不同的文件

文件格式为:最后成型:循环多个会生成多个一样的结构,数据不一样的文件我们可以使用easyExcel 的模板填充写入数据使用poi复制多个Sheet模板。

呋喃的博客 6100

30天入门 SAP BTP 开发系列之十八:保姆级教程 - 如何部署 SAP UI5 到 SAP BTP Cloud Foundry 环境

本文摘要: 本文详细介绍了如何将SAP UI5应用部署到Cloud Foundry环境。首先需完成前17篇教程学习,创建SAP BTP子账户并启用Cloud Foundry环境。在SAP Business Application Studio中创建Fiori开发空间,导入GitHub上的UI5项目代码。通过npm run build命令打包成mtar文件后,使用cf deploy命令部署到Cloud Foundry。部署成功后,可在BTP控制台查看应用或通过命令行获取访问URL。整个过程涵盖了环境准备、代码

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1020

Google antigravity 不支持你所在地区?手把手教你把账号改成支持地区

Google antigravity功能火爆,但国内老账号根本用不了🤬本文分享几种有效的账号国家地区切换方法,最快几分钟就能让antigravity直接亮起🔥

XiaoqiangClub的博客 2万+

史上最全的Excel导入导出之easyexcel

文章目录 环境搭建 读取excel文件 小于1000行数据 默认读取 指定读取 大于1000行数据 默认读取 指定读取 导出excle 单个Sheet导出 无模型映射导出 模型映射导出 多个Sheet导出 工具类 测试类 环境搭建 easyexcel 依赖(必须) springboot (不是必须) lombok (不是必须) <dependency> <group...

weixin_39214481的博客 2252

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

EasyExcel 实现多个sheet文件导入 学习笔记

首先定义了一个 StudentDataListener 类,继承自AnalysisEventListener,用于处理 Excel 数据读取过程中的事件。再实现文件导入接口。

骑着猪看大海的博客 689

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

jg_使用easyexcel读取excel_填充多个sheet_20220619

实体类 代码 参考文章 http://www.javashuo.com/article/p-bpwagdlf-nk.html

qq_40711092的博客 642

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

easyExcel使用demo

写入数据 //写入单个sheet public static void writeData(List<DemoData> dataList){ for (int i = 0; i < 3; i++) { EasyExcel.write(writeFileName).head(getHead()).sheet().doWrite(dataList); } } //写入多个sheet public s

LcShadow的博客 487

【Java】使用esayExcel进行导出、导入包含多个sheet页面

本文教程适合小白直接使用:先导出excel(含多个sheet),后导入,以上为导入依赖 以上就是导出excel含2个sheet页的基础代码,若是代码太多,建议处理:两个表都用 new ArrayList(),填充数据即可,导出导入亲测无问题。esayExcel要读取多个sheet页提供了监视器,针对每个sheet建立一个监视器,以下代码可以直接复制粘贴 第二个表格的监视器 获取表格中的数据

like_start的博客 6644

阿里巴巴项目组提供的easyexcel工具类,真香啊

喝水不忘挖井人,感谢阿里巴巴项目组提供了easyexcel工具类,github地址:https://github.com/alibaba/easyexcel文章目录环境搭建读取excel文...

独行侠梦的博客 756

多个sheet Excel 数据 导入数据库 如何实现?

多个sheet Excel 数据 导入数据库 如何实现?多个sheet Excel 数据 导入数据库 如何实现?多个sheet Excel 数据 导入数据库 如何实现?多个sheet Excel 数据 导入数据库 如何实现?多个sheet Excel 数据 导入数据库 如何实现?多个sheet Excel 数据 导入数据库 如何实现?多个sheet Excel 数据 导入数据库 如何实现?多个sheet Excel 数据 导入数据库 如何实现?多个sheet

猫头虎技术团队:授渔优于赠鱼,兴趣引领智慧,探索之乐尤显珍贵。商务合作+:Libin9iOak ,万粉变现+:优快云WF,猫头虎承诺每年免费为100名C站创作者做账号流量诊断服务!全网搜:猫头虎技术团队,点击文章底部名片或直接私信我一切皆可谈,快找虎哥! 4013

Excel导入导出之easyexcel

环境搭建 读取excel文件 小于1000行数据 默认读取 指定读取 大于1000行数据 默认读取 指定读取 导出excle 单个Sheet导出 无模型映射导出 模型映射导出 多个Sheet导出 工具类 测试类 环境搭建 easyexcel 依赖(必须) springboot (不是必须) lombok (不是必须)...

weixin_39687411的博客 771

EasyExcel获取excel文件中sheet页总数,及对应sheet页名称及下标

问题: 多工作表excel文件读取,获取文件中总共有多少个sheet页,及获取对应sheet页名称 代码 import com.alibaba.excel.EasyExcel; import com.alibaba.excel.ExcelReader; import com.alibaba.excel.read.metadata.ReadSheet; import lombok.extern.slf4j.Slf4j; import java.io.InputStream; import java.uti

Student0_zero的博客 1万+
上一篇: Windows 10 下编译 64 位 OpenJDK 8 并单步调试
下一篇: 基于SpringBoot的校园闲置物品交易网站
普通网友
博客等级 码龄1年 37粉丝 59原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值