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

用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 作为事件监听器。 下面是…...

停止回答 TypeError: (0 , _vue.defineComponent) is not a function

在 Vue.js 中遇到 TypeError: (0 , _vue.defineComponent) is not a function 错误通常意味着 defineComponent 函数没有被正确导入或者你的 Vue 版本不支持该函数。 解决步骤 检查 Vue 版本 defineComponent 是 Vue 3 中的一个功能&#xff0c;用于创建组件。确保你正在使用…...

数据结构与算法-单链表

链表 参考学习&#xff1a;B站-逊哥带你学编程 单链表 单链表-存储结构 typedef int ElemType;typedef struct node{ElemType data;struct node *next; }Node;单链表-初始化 Node *initList() {Node *head (Node *)malloc(sizeof(Node));head->data 0;head->next …...

ASP.NET Core 如何使用 C# 向端点发出 POST 请求

使用 C#&#xff0c;将 JSON POST 到 REST API 端点&#xff1b;如何从 REST API 接收 JSON 数据。 本文需要 ASP .NET Core&#xff0c;并兼容 .NET Core 3.1、.NET 6和.NET 8。 要从端点获取数据&#xff0c;请参阅本文。 使用 . 将 JSON 数据发布到端点非常容易HttpClien…...

DeepSeek模型R1服务器繁忙,怎么解决?

在当今科技飞速发展的时代&#xff0c;人工智能领域不断涌现出令人瞩目的创新成果&#xff0c;其中DeepSeek模型无疑成为了众多关注焦点。它凭借着先进的技术和卓越的性能&#xff0c;在行业内掀起了一股热潮&#xff0c;吸引了无数目光。然而&#xff0c;如同许多前沿技术在发…...

GlusterFS 深度洞察:从架构原理到案例实践的全面解读(上)

文章目录 一.GlusterFS简介二.GlusterFS原理架构三.适用场景四.Glusterfs与其他存储产品对比五.部署GlusterFS集群六. 使用heketi将glusterfs接入k8s作为后端存储 一.GlusterFS简介 GlusterFS是一个免费的开源分布式文件系统&#xff0c;具有无中心节点、堆栈式设计、全局统一…...

更新无忧:用 Docker 数据卷确保 Open WebUI 数据持久化

在使用 Docker 部署 Open WebUI 时&#xff0c;如何在更新容器的同时确保数据不丢失&#xff0c;始终是工程师们关注的焦点。每次拉取新版镜像、停止并重启容器时&#xff0c;如果没有正确挂载数据卷&#xff0c;配置和数据库数据极易流失&#xff0c;给生产环境带来不必要的麻…...

zyNo.22

常见Web漏洞解析 命令执行漏洞 1.Bash与CMD常用命令 &#xff08;1&#xff09;Bash 读取文件&#xff1a;最常见的命令cat flag 在 Bash 中&#xff0c;cat 以及的tac、nl、more、head、less、tail、od、pr 均为文件读取相关命令&#xff0c;它们的区别如下&#xff1a; …...

idea如何使用AI编程提升效率-在IntelliJ IDEA 中安装 GitHub Copilot 插件的步骤-卓伊凡

idea如何使用AI编程提升效率-在IntelliJ IDEA 中安装 GitHub Copilot 插件的步骤-卓伊凡 问题 idea编译器 安装copilot AI工具 实际操作 在 IntelliJ IDEA 中安装 GitHub Copilot 插件的步骤如下&#xff1a; 打开 IntelliJ IDEA&#xff1a; 打开你的 IntelliJ IDEA 应用…...

有哪些PHP开源框架属于是“高开疯走”的?

“高开疯走”是一个网络流行语或者谐音梗。可能是指一开始起点很高&#xff08;高开&#xff09;&#xff0c;然后发展迅速或者变得非常牛&#xff08;疯走&#xff09;。 在PHP生态中&#xff0c;一些框架面对市场的风起云涌&#xff0c;能持续保持高质量发展&#xff0c;切实…...

C# ASP.NET核心特性介绍

.NET学习资料 .NET学习资料 .NET学习资料 在当今的软件开发领域中&#xff0c;C# ASP.NET凭借其强大的功能和丰富的特性&#xff0c;成为构建 Web 应用程序的重要技术之一。以下将详细介绍 C# ASP.NET的核心特性。 多语言支持 ASP.NET 支持多种语言进行开发&#xff0c;这使…...

在 Linux 系统下,解压 `.tar.gz`

在 Linux 系统下,解压 .tar.gz 文件通常使用 tar 命令。.tar.gz 文件是一种压缩归档文件,它首先使用 tar 命令将多个文件打包为一个 .tar 文件,然后再使用 gzip 压缩生成 .tar.gz 文件。 解压 .tar.gz 文件的命令 要解压 .tar.gz 文件,可以使用以下命令: tar -xzvf fil…...

Unity 接入Tripo 文生模型,图生模型

官方网站&#xff1a;https://www.tripo3d.ai/app/home自行注册账号并且登陆下载Unity插件&#xff1a;https://cdn-web.tripo3d.ai/plugin/tripo-unity.zip申请apikey&#xff1a; https://platform.tripo3d.ai/api-keys使用&#xff08;后续过程就按照第二步下载的插件里面的…...

WPS计算机二级•文档的文本样式与编号

听说这是目录哦 标题级别❤️新建文本样式 快速套用格式&#x1fa77;设置标题样式 自定义设置多级编号&#x1f9e1;使用自动编号&#x1f49b;取消自动编号&#x1f49a;设置 页面边框&#x1f499;添加水印&#x1fa75;排版技巧怎么分栏&#x1f49c;添加空白下划线&#x…...

安卓使用JExcelApi读取Excel文件

要在安卓应用中使用JExcelApi读取Excel文件&#xff0c;你需要先确保你的项目中已经添加了JExcelApi的依赖。由于安卓项目的构建方式多样&#xff0c;这里以使用Gradle为例来介绍如何在安卓应用中集成和使用JExcelAPI。 ### 步骤1: 添加依赖 首先&#xff0c;在你的build.gra…...

外部中断实验 #STM32F407

外部中断实验 此实验将外部中断配置为按键输入&#xff0c;通过按键输入触发外部中断&#xff0c;在外部中断里面实施相应的处理&#xff0c;具体功能&#xff1a; 按下KEY0&#xff0c;翻转LED0状态按下KEY1&#xff0c;翻转LED1状态按下KEY2&#xff0c;同时翻转LED0和LED1…...

kafka了解-笔记

文章目录 kafka快速上手Kafka介绍Kafka快速上手理解Kafka的集群工作机制Kafka集群的消息流转模型 Kafka客户端小型流转流程客户端工作机制 kafka快速上手 Kafka介绍 MQ的作用 MQ&#xff1a;MessageQueue&#xff0c;消息队列&#xff0c;是一种FIFO先进先出的数据结构&#…...

渗透利器:Burp Suite 联动 XRAY 图形化工具.(主动扫描+被动扫描)

Burp Suite 联动 XRAY 图形化工具.&#xff08;主动扫描被动扫描&#xff09; Burp Suite 和 Xray 联合使用&#xff0c;能够将 Burp 的强大流量拦截与修改功能&#xff0c;与 Xray 的高效漏洞检测能力相结合&#xff0c;实现更全面、高效的网络安全测试&#xff0c;同时提升漏…...

解决QTimer报“Timers cannot be started from another thread“错误

今天在Qt编程时&#xff0c;将QTimer在子线程里执行start()函数&#xff0c;遇到“Timers cannot be started from another thread”问题&#xff0c;使用了如下AI工具&#xff0c;进行查询&#xff1a;     提示词A&#xff1a;“C QTimer 如何跨线程”     提示词B&#…...

vant4 van-list组件的使用

<van-listv-if"joblist && joblist.length > 0"v-model:loading"loading":finished"finished":immediate-check"false"finished-text"没有更多了"load"onLoad">// 加载 const loading ref(fals…...

C++11新特性之weak_ptr智能指针

本节介绍最后一个智能指针——weak_ptr智能指针。 1.介绍 weak_ptr智能指针也是以模板类的方式实现的。同样定义在<memory>头文件&#xff0c;并位于std命名空间中。在使用前需包含这两条语句。 C11虽然将weak_ptr当做智能指针&#xff0c;但该类型通常不单独使用&#…...

LM Studio无设置代理,更改镜像源方法(MAC)

在macbook上使用LM Studio时发现总是加载失败&#xff0c;App也没有设置代理的地方&#xff0c;搜索了挺多解决方案&#xff0c;貌似官网再可以封补很多解决方案已经过时&#xff0c;最终找到一种替换镜像源的方法共享出来。 方便大家都能使用&#xff0c;不介绍命令行修改方式…...

js中的== 和 ===运算符的比较和区别(面试题)

和 运算符用于比较 JavaScript 值是否相等。 自动转换数据类型&#xff0c;允许不同类型值的比较。 进行严格相等比较&#xff0c;仅在值和数据类型都相同的情况下返回 true。NaN 仅在 比较中与自身相等&#xff0c;而在 比较中不相等。null 和 undefined 仅在 比较中相等。…...

通过客户端Chatbox或OpenwebUI访问识别不到本地ollama中的模型等问题的解决

Chatbox和Open WebUI 等无法获取到 Ollama里的模型&#xff0c;主要是由以下原因导致&#xff1a; Ollama 服务未正确暴露给 Docker 容器或客户端模型未正确下载或名称不匹配网络配置或权限问题 排查以上问题的思路首先排查ollama服务是否启动&#xff0c;然后再看端口号 使…...

C# 上位机--变量

C# 上位机--变量 在 C# 上位机开发领域&#xff0c;变量是构建程序逻辑的基础元素之一。它就像是一个容器&#xff0c;用于存储各种类型的数据&#xff0c;从简单的数值到复杂的对象。正确理解和使用变量&#xff0c;对于开发出高效、稳定且易于维护的上位机程序至关重要。本文…...

【Mastering Vim 2_01】开篇词:在 AI 时代持续深耕底层技术,做长期主义的坚定捍卫者

【最新版《Mastering Vim》封面&#xff0c;涵盖 Vim 9.0 版特性】 文章目录 1 背景&#xff1a;AI 时代的底层技术觉醒2 Vim&#xff1a;一款被严重低估的文本编辑神器3 聊聊 IT 人士的职业病4 进阶之道&#xff1a;构建完整的知识体系5 从 AI 时代的深耕与精进再谈长期主义 1…...

【JVM详解二】常量池

一、常量池概述 JVM的常量池主要有以下几种&#xff1a; class文件常量池运行时常量池字符串常量池基本类型包装类常量池 它们相互之间关系大致如下图所示&#xff1a; 每个 class 的字节码文件中都有一个常量池&#xff0c;里面是编译后即知的该 class 会用到的字面量与符号引…...

Leetcode - 149双周赛

目录 一、3438. 找到字符串中合法的相邻数字二、3439. 重新安排会议得到最多空余时间 I三、3440. 重新安排会议得到最多空余时间 II四、3441. 变成好标题的最少代价 一、3438. 找到字符串中合法的相邻数字 题目链接 本题有两个条件&#xff1a; 相邻数字互不相同两个数字的的…...

Java爬虫:打造高效的数据抓取利器——详解详情接口设计与实现

在当今数字化时代&#xff0c;数据如同黄金般珍贵。无论是企业进行市场调研、竞争对手分析&#xff0c;还是研究人员收集信息&#xff0c;数据的需求无处不在。而爬虫技术&#xff0c;作为一种高效的数据抓取手段&#xff0c;成为了众多开发者手中的利器。本文将深入探讨如何使…...

蓝桥杯K倍区间(前缀和与差分,取模化简)

输入 5 2 1 2 3 4 5 输出 6 思路&#xff1a;首先由连续子串和可以想用前缀和&#xff0c;由于加减法总和取模和分别取模结果不受影响&#xff0c;所以我们前缀和之后直接取模方便观察性质&#xff0c;本题前缀和&#xff1a;1&#xff0c;3&#xff0c;6&#xff0c;10&#…...