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

用easyExcel如何实现?

要使提供的 ExcelModelListener 类来解析 Excel 文件并实现批量存储数据库的功能,需要结合 EasyExcel 库来读取 Excel 数据。具体来说,可以使用 EasyExcel.read() 方法来读取 Excel 文件,并指定 ExcelModelListener 作为事件监听器。

下面是调用 ExcelModelListener 进行 Excel 文件解析的完整示例代码:

1. 首先,确保已经添加了 EasyExcel 依赖

如果你还没有在 Maven 项目中引入 EasyExcel,可以在 pom.xml 文件中添加如下依赖:

<dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>3.0.5</version> <!-- 确保使用最新版本 -->
</dependency>

2. 调用 ExcelModelListener 的代码

假设你有一个 Excel 文件 data.xlsx,并且 ExcelMode 是与 Excel 数据对应的 Java 类,你可以按照以下步骤来调用监听器解析 Excel 文件:

ExcelMode 类示例(简化版)
package com.zh.oukele.model;public class ExcelMode {private String field1;private String field2;// 这里是你Excel中每一列的对应字段// 省略getter和setter
}
使用 ExcelModelListener 解析 Excel 文件
package com.zh.oukele;import com.alibaba.excel.EasyExcel;
import com.zh.oukele.listener.ExcelModelListener;
import com.zh.oukele.model.ExcelMode;import java.io.File;public class ExcelImportService {public static void main(String[] args) {String fileName = "path/to/your/excel/data.xlsx"; // Excel 文件路径// 调用 EasyExcel 来读取文件EasyExcel.read(fileName, ExcelMode.class, new ExcelModelListener()).sheet().doRead();}
}

3. 代码解析

  • EasyExcel.read(fileName, ExcelMode.class, new ExcelModelListener()):

    • 这行代码调用了 EasyExcel 的读取方法,指定了 Excel 文件的路径 fileName,以及用于解析 Excel 数据的 Java 类 ExcelMode
    • ExcelModelListener 被传递给 EasyExcel 作为事件监听器,这样 EasyExcel 在读取每一行数据时,就会调用 ExcelModelListener 中的 invoke() 方法。
  • .sheet():

    • 该方法指定读取 Excel 文件中的一个 sheet(工作表)。如果 Excel 文件有多个 sheet,你可以指定其他 sheet,比如 .sheet(1).sheet("sheetName")
  • .doRead():

    • 该方法触发实际的 Excel 数据读取操作。

4. ExcelModelListener 的工作流程

  • 逐行读取数据

    • ExcelModelListenerinvoke() 方法会在每一行数据被读取时被调用。你可以在这个方法中处理每一行的数据,例子中是将数据存储到 list 中。
  • 批量处理

    • 每当读取的数据达到设定的批量大小(如 BATCH_COUNT = 5),就会调用 saveData() 方法将数据存储到数据库中,之后清空 list
  • 全部数据解析完成后

    • doAfterAllAnalysed() 会在 Excel 文件解析完成后被调用,通常用于进行一些收尾操作,比如存储最后一批数据或释放资源。

5. 完整代码示例

假设 Excel 文件中有两列数据(如 field1field2),以下是完整的代码示例:

ExcelMode.java
package com.zh.oukele.model;public class ExcelMode {private String field1;private String field2;// Getter 和 Setter 方法public String getField1() {return field1;}public void setField1(String field1) {this.field1 = field1;}public String getField2() {return field2;}public void setField2(String field2) {this.field2 = field2;}@Overridepublic String toString() {return "ExcelMode{" +"field1='" + field1 + '\'' +", field2='" + field2 + '\'' +'}';}
}
ExcelModelListener.java(主要的类)
package com.zh.oukele.listener;import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;
import com.zh.oukele.model.ExcelMode;import java.util.ArrayList;
import java.util.List;public class ExcelModelListener extends AnalysisEventListener<ExcelMode> {private static final int BATCH_COUNT = 5;List<ExcelMode> list = new ArrayList<ExcelMode>();private static int count = 1;@Overridepublic void invoke(ExcelMode data, AnalysisContext context) {System.out.println("解析到一条数据: { " + data.toString() + " }");list.add(data);count++;if (list.size() >= BATCH_COUNT) {saveData(count);list.clear();}}@Overridepublic void doAfterAllAnalysed(AnalysisContext context) {saveData(count);System.out.println("所有数据解析完成!");System.out.println("count :" + count);}private void saveData(int count) {System.out.println("{ " + count + " }条数据,开始存储数据库!" + list.size());// 这里你可以将 list 中的数据存入数据库System.out.println("存储数据库成功!");}
}
ExcelImportService.java(调用和执行)
package com.zh.oukele;import com.alibaba.excel.EasyExcel;
import com.zh.oukele.listener.ExcelModelListener;
import com.zh.oukele.model.ExcelMode;public class ExcelImportService {public static void main(String[] args) {String fileName = "path/to/your/excel/data.xlsx"; // Excel 文件路径// 调用 EasyExcel 来读取文件EasyExcel.read(fileName, ExcelMode.class, new ExcelModelListener()).sheet().doRead();}
}

总结

  • 你通过 EasyExcel.read() 读取 Excel 文件,并且指定 ExcelModelListener 作为事件监听器。
  • ExcelModelListener 会处理每一行数据,当达到设定的批量大小时进行批量存储。
  • 数据解析完成后,可以通过 doAfterAllAnalysed() 做一些收尾操作。

这个流程非常适合处理大量数据的 Excel 文件,能够在保证内存高效的同时,还能进行批量数据的持久化操作。

相关文章:

用easyExcel如何实现?

要使提供的 ExcelModelListener 类来解析 Excel 文件并实现批量存储数据库的功能&#xff0c;需要结合 EasyExcel 库来读取 Excel 数据。具体来说&#xff0c;可以使用 EasyExcel.read() 方法来读取 Excel 文件&#xff0c;并指定 ExcelModelListener 作为事件监听器。 下面是…...

从 X86 到 ARM :工控机迁移中的核心问题剖析

在工业控制领域&#xff0c;技术的不断演进促使着工控机从 X86 架构向 ARM 架构迁移。然而&#xff0c;这一过程并非一帆风顺&#xff0c;面临着诸多关键挑战。 首先&#xff0c;软件兼容性是一个重要问题。许多基于 X86 架构开发的工业控制软件可能无法直接在 ARM 架构上运行…...

大模型DeepSeek-R1学习

学习路线 机器学习-> 深度学习-> 强化学习-> 深度强化学习 大模型演进分支 微调&#xff1a; SFT 监督学习蒸馏&#xff1a;把大模型作为导师训练小模型RLHF&#xff1a;基于人类反馈的强化学习 PPO 近端策略优化 油门 - 重要性采样 权重 * 打分刹车 - clip 修剪…...

【STM32】H743的以太网MAC控制器的一个特殊功能

调试743的MAC&#xff0c;翻阅手册的时候&#xff0c;发现了一个有意思的功能 混杂模式 H743的MAC控制器&#xff0c;可以设置为混杂模式&#xff0c;这就意味着它可以做一些网络监控的应用&#xff0c;譬如连接具备端口镜像功能的交换机&#xff0c;然后直接代替PC实现网络数据…...

关于“i18n“在vue中的使用

关于"i18n"在vue中的使用 <!-- vue2中 --> <template><div>{{ $t("This campaign has expired.") }}}}</div> </template> <script> export default {created() {this.onLoading();},methods: {onLoading () {this.$…...

前缀树算法篇:前缀信息的巧妙获取

前缀树算法篇&#xff1a;前缀信息的巧妙获取 那么前缀树算法是一个非常常用的算法&#xff0c;那么在介绍我们前缀树具体的原理以及实现上&#xff0c;我们先来说一下我们前缀树所应用的一个场景&#xff0c;那么在一个字符串的数据集合当中&#xff0c;那么我们查询我们某个字…...

DVSI使用SenseGlove为开发虚拟现实场景技能培训

虚拟现实场景技能培训能够有效提升被培训者的技能熟练度&#xff0c;使其在现实世界中经历类似事件时第一时间做出正确反映&#xff0c;从而大大降低因缺乏相关技能经验所造成的财产、人员、时间损失。 DVSI&#xff08;Digital Voice Systems Inc&#xff09;是一家美国数字化…...

VSCode + Continue 实现AI编程助理

安装VS Code 直接官网下载安装&#xff0c;反正是免费的。 安装VS插件Continue 直接在插件市场中搜索&#xff0c; Continue&#xff0c;第一个就是了。 配置Chat Model 点击Add Chat model后进行选择&#xff1a; 选择Ollama后&#xff0c;需要点击下面的config file : 由于…...

【PHP的static】

关于静态属性 最简单直接&#xff1a;静态方法也是一样 看了很多关于静态和动态的说法&#xff0c;无非是从 调用方式&#xff0c; 类访问实例变量&#xff0c; 访问静态变量&#xff0c; 需不要实例化这几个方向&#xff0c;太空了。问使用场景&#xff0c;好一点的 能说个…...

考研操作系统----操作系统的概念定义功能和目标(仅仅作为王道哔站课程讲义作用)

目录 操作系统的概念定义功能和目标 操作系统的四个特征 操作系统的分类 ​编辑 操作系统的运行机制 系统调用 操作系统体系结构 操作系统引导 虚拟机 操作系统的概念定义功能和目标 什么是操作系统&#xff1a; 操作系统是指控制和管理整个计算机系统的软硬件资源&…...

从360度全景照片到高质量3D场景:介绍SC-Omnigs 3D重建系统

在当今的数字化时代,3D重建技术正在迅速发展,并广泛应用于文旅、空间智能和3D重建等领域。为了简化360度全景相机拍摄数据的处理流程,提高3D场景重建的质量和效率,我们开发了一款专门处理360度全景相机数据的3D重建系统——SC-Omnigs。本文将详细介绍这一系统的功能、特点及…...

前沿技术新趋势:值得关注的创新发展

量子通信是一种新兴的通信技术。它基于量子力学的原理&#xff0c;特别是量子叠加和量子纠缠。量子通信的核心在于量子比特qubits&#xff09;&#xff0c;与传统的比特不同&#xff0c;量子比特可以同时处于多种状态。这种特性使得信息的传输更为安全。 量子通信技术的最大优…...

算法跟练第十一弹——二叉树

文章目录 part01 递归遍历1.1 二叉树的前序遍历1.2 二叉树的中序遍历1.3 二叉树的后序遍历 part02 迭代遍历2.1 二叉树的前序遍历2.2 二叉树的中序遍历2.3 二叉树的后序遍历 part03 层序遍历3.1 二叉树的层序遍历3.2 二叉树的层序遍历II3.3 二叉树的右视图 归纳获取双重链表的第…...

机器学习(李宏毅)——BERT

一、前言 本文章作为学习2023年《李宏毅机器学习课程》的笔记&#xff0c;感谢台湾大学李宏毅教授的课程&#xff0c;respect&#xff01;&#xff01;&#xff01; 读这篇文章必须先了解self-attention、Transformer&#xff0c;可参阅我其他文章。 二、大纲 BERT简介self-…...

新数据结构(7)——Object

Object类是所有类的父类&#xff0c;在 Java 中&#xff0c;每个类都直接或间接地继承自Object类&#xff0c;也就是说所有类都是object类的子类可以使用Object里的方法。 equals()和hashCode()是Java中Object类所包含的两个关键方法&#xff0c;下面将介绍两个方法。 和equa…...

云计算基础

环境准备 配置虚拟机安装docker 前提安装 步骤命令效果图 安装docker-compose 前提安装 步骤效果图 安装gitea 步骤命令效果图 执行docker-compose命令浏览器初始gitea配置浏览器登录gitea创建组织创建仓库 Drone安装 步骤效果图 非自动化部署 nginx安装redis安装jdk安装…...

利用kali linux 进行自动化渗透测试

本方案旨在自动化创建渗透测试全流程 一、架构 1.智能信息收集体系 class IntelligentOSINT:def __init__(self, target):self.target targetself.intelligence_sources [OSINT_Platforms,DeepWeb_Crawlers, SocialMedia_Trackers,ML_Correlation_Engine]def advanced_col…...

【Vue中BUG解决】npm error path git

报错内容如下&#xff1a; 从错误信息可知&#xff0c;这是一个 ENOENT&#xff08;No Entry&#xff0c;即找不到文件或目录&#xff09;错误&#xff0c;并且与 git 相关。具体来说&#xff0c;npm 在尝试调用 git 时&#xff0c;无法找到 git 可执行文件&#xff0c;下面为…...

GPT-4o微调SFT及强化学习DPO数据集构建

假设&#xff0c;已经标注的训练数据集df包含了提示词、输入和输出三列。 构建微调SFT的数据集代码如下&#xff1a; data [] for x in df.values:prompt x[1]user_content x[2]assistant_content x[3]data.append({"messages": [{"role": "sys…...

element-plus 解决el-dialog背后的页面滚动问题,及其内容有下拉框出现错位问题

这个问题通常是因为 el‑dialog 默认会锁定 body 的滚动&#xff08;通过给 body 添加隐藏滚动条的样式&#xff09;&#xff0c;从而导致页面在打开对话框时跳转到顶部。解决方法是在使用 el‑dialog 时禁用锁定滚动功能。 <el-dialogv-model"dialogVisible":lo…...

JavaSec-RCE

简介 RCE(Remote Code Execution)&#xff0c;可以分为:命令注入(Command Injection)、代码注入(Code Injection) 代码注入 1.漏洞场景&#xff1a;Groovy代码注入 Groovy是一种基于JVM的动态语言&#xff0c;语法简洁&#xff0c;支持闭包、动态类型和Java互操作性&#xff0c…...

7.4.分块查找

一.分块查找的算法思想&#xff1a; 1.实例&#xff1a; 以上述图片的顺序表为例&#xff0c; 该顺序表的数据元素从整体来看是乱序的&#xff0c;但如果把这些数据元素分成一块一块的小区间&#xff0c; 第一个区间[0,1]索引上的数据元素都是小于等于10的&#xff0c; 第二…...

【杂谈】-递归进化:人工智能的自我改进与监管挑战

递归进化&#xff1a;人工智能的自我改进与监管挑战 文章目录 递归进化&#xff1a;人工智能的自我改进与监管挑战1、自我改进型人工智能的崛起2、人工智能如何挑战人类监管&#xff1f;3、确保人工智能受控的策略4、人类在人工智能发展中的角色5、平衡自主性与控制力6、总结与…...

【决胜公务员考试】求职OMG——见面课测验1

2025最新版&#xff01;&#xff01;&#xff01;6.8截至答题&#xff0c;大家注意呀&#xff01; 博主码字不易点个关注吧,祝期末顺利~~ 1.单选题(2分) 下列说法错误的是:&#xff08; B &#xff09; A.选调生属于公务员系统 B.公务员属于事业编 C.选调生有基层锻炼的要求 D…...

leetcodeSQL解题:3564. 季节性销售分析

leetcodeSQL解题&#xff1a;3564. 季节性销售分析 题目&#xff1a; 表&#xff1a;sales ---------------------- | Column Name | Type | ---------------------- | sale_id | int | | product_id | int | | sale_date | date | | quantity | int | | price | decimal | -…...

Element Plus 表单(el-form)中关于正整数输入的校验规则

目录 1 单个正整数输入1.1 模板1.2 校验规则 2 两个正整数输入&#xff08;联动&#xff09;2.1 模板2.2 校验规则2.3 CSS 1 单个正整数输入 1.1 模板 <el-formref"formRef":model"formData":rules"formRules"label-width"150px"…...

安宝特方案丨船舶智造的“AR+AI+作业标准化管理解决方案”(装配)

船舶制造装配管理现状&#xff1a;装配工作依赖人工经验&#xff0c;装配工人凭借长期实践积累的操作技巧完成零部件组装。企业通常制定了装配作业指导书&#xff0c;但在实际执行中&#xff0c;工人对指导书的理解和遵循程度参差不齐。 船舶装配过程中的挑战与需求 挑战 (1…...

技术栈RabbitMq的介绍和使用

目录 1. 什么是消息队列&#xff1f;2. 消息队列的优点3. RabbitMQ 消息队列概述4. RabbitMQ 安装5. Exchange 四种类型5.1 direct 精准匹配5.2 fanout 广播5.3 topic 正则匹配 6. RabbitMQ 队列模式6.1 简单队列模式6.2 工作队列模式6.3 发布/订阅模式6.4 路由模式6.5 主题模式…...

招商蛇口 | 执笔CID,启幕低密生活新境

作为中国城市生长的力量&#xff0c;招商蛇口以“美好生活承载者”为使命&#xff0c;深耕全球111座城市&#xff0c;以央企担当匠造时代理想人居。从深圳湾的开拓基因到西安高新CID的战略落子&#xff0c;招商蛇口始终与城市发展同频共振&#xff0c;以建筑诠释对土地与生活的…...

CSS | transition 和 transform的用处和区别

省流总结&#xff1a; transform用于变换/变形&#xff0c;transition是动画控制器 transform 用来对元素进行变形&#xff0c;常见的操作如下&#xff0c;它是立即生效的样式变形属性。 旋转 rotate(角度deg)、平移 translateX(像素px)、缩放 scale(倍数)、倾斜 skewX(角度…...