当前位置: 首页 > 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…...

如何永久保存微信聊天记录:5分钟学会WeChatMsg免费完整指南

如何永久保存微信聊天记录&#xff1a;5分钟学会WeChatMsg免费完整指南 【免费下载链接】WeChatMsg 提取微信聊天记录&#xff0c;将其导出成HTML、Word、CSV文档永久保存&#xff0c;对聊天记录进行分析生成年度聊天报告 项目地址: https://gitcode.com/GitHub_Trending/we/…...

基于LLM的多智能体协作框架:从原理到实践构建自主开发团队

1. 项目概述与核心价值最近在开源社区里&#xff0c;一个名为zxkane/autonomous-dev-team的项目引起了我的注意。乍一看这个标题&#xff0c;你可能会联想到科幻电影里的全自动机器人编程&#xff0c;或者是一些过于理想化的“AI接管开发”的噱头。但在我花时间深入研究和实践之…...

WPF中OxyPlot不同图表的使用

在 WPF 中使用 OxyPlot 实现不同图表&#xff0c;核心在于创建和配置PlotModel对象&#xff0c;并将其绑定到PlotView控件上进行显示。通过向PlotModel中添加不同类型的Series&#xff08;数据系列&#xff09;&#xff0c;即可轻松实现折线图、柱状图、饼图、散点图等多种图表…...

应用间自动化网关:构建私有化、可编程的跨平台工作流中枢

1. 项目概述与核心价值最近在折腾一些跨平台、跨设备的自动化流程&#xff0c;发现一个痛点&#xff1a;不同应用、不同服务之间的数据流转&#xff0c;经常需要手动“搭桥”。比如&#xff0c;想把手机上的一个链接快速推送到电脑上处理&#xff0c;或者把某个文档从A服务同步…...

混元图像3.0:多模态联合表征驱动的视觉逻辑引擎

1. 项目概述&#xff1a;这不是又一个“图生图”玩具&#xff0c;而是一次底层能力的重新定义“混元&#xff1a;发布图像3.0图生图模型&#xff0c;总参数量80亿”——这个标题里藏着三个被多数人忽略的关键信号&#xff1a;“图像3.0”不是版本号&#xff0c;是代际跃迁的命名…...

游戏平台硬件开发:定制化与长期稳定的挑战

1. 游戏平台硬件开发的特殊挑战在游戏平台开发领域&#xff0c;硬件选型往往面临着一个两难选择&#xff1a;是采用现成的通用组件&#xff08;Off The Shelf Components&#xff09;&#xff0c;还是投入高昂成本进行完全定制化开发&#xff1f;过去十年间&#xff0c;我参与过…...

ctf show web入门48

这是一道典型的 PHP 代码审计与命令注入&#xff08;Command Injection&#xff09; 绕过题。代码逻辑分析 代码的核心逻辑如下&#xff1a; 输入点&#xff1a;通过 GET 方式接收参数 c。 过滤机制&#xff1a;使用 preg_match 进行正则匹配&#xff0c;过滤了大量关键字符和命…...

知识图谱与智能体如何革新小说创作:graphify-novel项目深度解析

1. 项目概述&#xff1a;用知识图谱为你的小说创作装上“第二大脑”如果你是一位小说创作者&#xff0c;无论是网文作者、传统文学写作者&#xff0c;还是游戏叙事设计师&#xff0c;你一定经历过这样的痛苦时刻&#xff1a;写到第30章&#xff0c;突然想不起某个配角在第5章出…...

Simplefolio构建优化终极指南:Tree Shaking与代码分割实战

Simplefolio构建优化终极指南&#xff1a;Tree Shaking与代码分割实战 【免费下载链接】simplefolio ⚡️ A minimal portfolio template for Developers 项目地址: https://gitcode.com/gh_mirrors/si/simplefolio Simplefolio是一个为开发者设计的极简个人作品集模板&…...

跨越版本鸿沟:Matlab 2020b与VS2022混合编译环境搭建实战

1. 环境准备&#xff1a;当Matlab 2020b遇上VS2022 第一次尝试在Matlab 2020b里调用VS2022编译器时&#xff0c;命令行弹出的红色报错让我愣了半天。官方文档明确写着Matlab 2020b最高只支持VS2019&#xff0c;这就像让Windows XP运行最新版Photoshop——理论上不可能&#xff…...