EasyExcel轻松读取Excel文件!

2023-11-20

EasyExcel是一个Java库,用于快速、简单地读写Excel文件。要使用EasyExcel,您首先需要将其添加为项目的依赖:

如果使用Maven,可以添加以下依赖项:

<dependency>
  <groupId>com.alibaba</groupId>
  <artifactId>easyexcel</artifactId>
  <version>2.2.7</version>
</dependency>

一下几种方式读取文件

1、EasyExcel.read()

例如,下面的代码演示了如何使用EasyExcel读取一个Excel文件中的数据:

// 创建一个ExcelReader对象,用于读取Excel文件
ExcelReader reader = EasyExcel.read("/path/to/file.xlsx", MyModel.class, new MyListener())
    .build();

// 读取Excel文件中的数据
reader.read();

// 关闭reader
reader.finish();

在上面的代码中,MyModel.class指定了用于表示Excel文件中的数据的Java类,而MyListener类实现了一个事件监听器,用于处理读取过程中发生的事件。

下面的代码演示了如何使用EasyExcel将数据写入Excel文件:

// 创建一个ExcelWriter对象,用于写入Excel文件
ExcelWriter writer = EasyExcel.write("/path/to/file.xlsx", MyModel.class)

2、ExcelReader.read()

可以通过为ExcelReader.read()方法传递一个List对象来读取Excel文件中的数据并存储到一个集合中。例如:

// 创建一个用于存储数据的List
List<MyModel> data = new ArrayList<>();

// 创建一个ExcelReader对象,用于读取Excel文件
ExcelReader reader = EasyExcel.read("/path/to/file.xlsx", MyModel.class, new MyListener())
    .build();

// 读取Excel文件中的数据
reader.read(data);

// 关闭reader
reader.finish();

// 在这里,data中存储了读取出来的数据

在上面的代码中,ExcelReader.read()方法会将读取到的数据添加到传入的List对象中。可以在读取完成后使用该集合进行进一步的操作。

3、实现ExcelListener

在EasyExcel中,您可以通过实现ExcelListener接口来创建一个监听器,用于在读取Excel文件中的数据时处理事件。例如,下面的代码演示了如何实现一个监听器:

public class MyListener implements ExcelListener {

  // 在读取Excel开始时调用
  @Override
  public void onStart(ExcelReaderContext context) {
    // do something
  }

  // 在读取完一行数据后调用
  @Override
  public void onRow(ExcelReaderContext context) {
    // do something
  }

  // 在读取完所有数据后调用
  @Override
  public void onFinish(ExcelReaderContext context) {
    // do something
  }

}

在上面的代码中,MyListener类实现了ExcelListener接口,并重写了接口中定义的三个方法。在读取Excel文件时,EasyExcel会在适当的时候调用这些方法,您可以在这些方法中处理事件。

例如,您可以在onRow()方法中处理读取完一行数据后的事件,并在onFinish()方法中处理读取完所有数据后的事件。

下面的代码演示了如何使用一个监听器读取Excel文件中的数据:

// 创建一个ExcelReader对象,用于读取Excel文件
ExcelReader reader = EasyExcel.read("/path/to/file.xlsx", MyModel.class, new MyListener())
    .build();

// 读取Excel文件中的数据
reader.read();

// 关闭reader
reader.finish();

4、实现AnalysisEventListener

除了实现ExcelListener接口和使用回调函数,EasyExcel还提供了另一种方式来处理读取Excel文件中的数据:继承AnalysisEventListener类。

AnalysisEventListener是一个抽象类,它实现了ExcelListener接口,并为每一行数据提供了一个默认的实现。您可以继承AnalysisEventListener类,并重写其中的方法来实现您自己的监听器。

例如,下面的代码演示了如何继承AnalysisEventListener类来实现一个监听器:

public class MyListener extends AnalysisEventListener<MyModel> {

  // 在读取完一行数据后调用
  @Override
  public void invoke(MyModel data, AnalysisContext context) {
    // do something
  }

  // 在读取完所有数据后调用
  @Override
  public void doAfterAllAnalysed(AnalysisContext context) {
    // do something
  }

}

在上面的代码中,MyListener类继承了AnalysisEventListener类,并重写了其中的两个方法。在读取Excel文件时,EasyExcel会在适当的时候调用这些方法,您可以在这些方法中处理事件。

例如,您可以在invoke()方法中处理读取完一行数据后的事件,并在doAfterAllAnalysed()方法中处理读取完所有数据后的事件。

5、以上方法的优缺点

实现ExcelListener接口:

优点:

  • 可以处理读取过程中的更多事件,包括读取开始和结束时的事件。
  • 可以更灵活地处理读取的每一行数据。

缺点:

  • 需要实现接口并重写多个方法,可能需要更多的代码。

使用回调函数:

优点:

  • 可以更灵活地处理读取的每一行数据。
  • 代码简洁,易于理解和维护。

缺点:

  • 不能处理读取过程中的更多事件,只能处理读取完一行数据后的事件。

继承AnalysisEventListener类:

优点:

  • 已经为每一行数据提供了默认的实现,只需要重写其中的方法即可。
  • 代码简洁,易于理解和维护。

缺点:

  • 不能处理读取过程中的更多事件,只能处理读取完一行数据和读取完所有数据后的事件。
  • 如果需要更灵活地处理读取的每一行数据,可能需要实现更多的代码。

总之,您可以根据自己的需要选择实现ExcelListener接口、使用回调函数或继承AnalysisEventListener类来处理读取Excel文件中的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

EasyExcel轻松读取Excel文件! 的相关文章

  • 通过 RMI 的服务器,无需注册

    我有一个可以通过 RMI 连接的服务对象 目前我正在这样做 Server Registry r LocateRegistry createRegistry 1234 r bind server UnicastRemoteObject exp
  • iText7:如何获取段落的实际宽度

    在添加到文档之前 我需要知道段落的宽度 以磅为单位 我在这里搜索并找到了 Alexey 关于段落高度的答案 所以我用宽度做了它 但它不起作用 无论段落有多长 始终返回矩形的宽度 我尝试了这段代码 private float getRealP
  • 如何操作指定列上的 JTable 返回值?

    我有一个 JTable 有两列 可编辑的JTable 当用户在第二列中输入内容时 我的要求如下 用户只能输入数字和逗号 当用户输入错误字符时 会发出蜂鸣声 Toolkit getDefaultToolkit beep 我该如何实现这一目标
  • 可以显式删除 lambda 的序列化支持

    As 已经知道 https stackoverflow com a 22808112 2711488很容易添加序列化当目标接口尚未继承时支持 lambda 表达式Serializable 就像 TargetInterface Seriali
  • java.lang.IllegalArgumentException:比较方法违反了其一般契约[重复]

    这个问题在这里已经有答案了 您好 下面是我的比较器的比较方法 我不确定出了什么问题 我在堆栈溢出上查找了其他类似标题的问题和答案 但不确定我的方法出了什么问题 但我不断收到 java lang IllegalArgumentExceptio
  • 有没有办法将 Excel 单元格条目转换为一致的日期和时间格式?

    我正在处理雨量计数据记录器生成的 csv 文件中的一些雨量计数据 我发现日期和时间的记录不一致 以以下两种格式之一交替显示 Format 1 mm dd yyyy hh mm 24 hour clock or Format 2 mm dd
  • 关于java中同步的问题;何时/如何/到什么程度

    我正在开发我的第一个多线程程序 并在同步的几个方面陷入困境 我已经浏览了 oracle sun 主页上的多线程教程 以及这里的一些关于 SO 的问题 所以我相信我知道什么是同步 然而 正如我提到的 有几个方面我不太确定如何弄清楚 我以明确问
  • 如何查找给定字符串中仅出现一次的第一个字符[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • Android 改造参数化@Headers

    我正在使用 OAuth 每次发出请求时都需要将 OAuth 令牌放入标头中 我看到 Header注释 但是有没有办法让它参数化 以便我可以在运行时传入 这是概念 Header Authorization OAuth var api vers
  • Kotlin 中的枚举类对于 Android 来说是否像 Java 中那样“昂贵”?

    Are EnumKotlin 中的类对于 Android 来说 昂贵 就像 Java 一样 还可以用吗 IntDefs or StringDefs在科特林 当我将 Kotlin Enum 类反编译为 Java 类时 底层仍然使用了 Java
  • 是否可以从 JBoss 容器中部署的所有 .war 文件中读取属性文件

    我已成功将 war 部署到 Jboss Web 容器 其中包含并读取位于 META INF groupid dir artifactid dir 下的 pom properties 为了访问该文件 我在同一 war 中的 JSP 中使用了以
  • 如何在 Google 地图中创建自定义地图?

    我正在尝试创建一个包含我家地图的 Google 地图应用程序 卧室 浴室 厨房等 使用 GPS 我会找到我现在在家里的位置 并尝试获取到我卧室的方向 步行距离 您可以使用Google的API来获取方向 我需要知道的是 如何添加我家的自定义地
  • 为什么我们在同一台服务器上使用多个应用程序服务器实例

    我想这是有充分理由的 但我不明白为什么有时我们会在同一物理服务器上放置例如 5 个具有相同 Web 应用程序的实例 这与多处理器架构的优化有关吗 JVM 或其他允许的最大内存限制 嗯 过了很长一段时间我又看到这个问题了 一台机器上的多个 J
  • Java并发锁和条件的使用

    我可以用object wait object notify and synchronized blocks解决生产者消费者类型的问题 同时我可以使用locks and conditions from java util concurrent
  • 如何在非Spring的构造型类中使用@Autowired

    我想在此类中使用该存储库 但是当我放置像 Component 这样的构造型时 我从 IDE 收到错误 无法自动装配 未找到 身份验证 类型的 bean public class CustomMethodSecurityExpressionR
  • 将许多表转换为 Excel 列

    我创建了用于文章审阅的网络应用程序 我有一个名为 Article 的表 每个表Article有一些ArticleReview Article ArticleId ArticleTitle NumberOfComment NumberOfVi
  • 使用基于Optional内容的流

    我从不受我控制的服务获取可能为空的地图 并且想要处理它 比方说 过滤 映射并减少到我需要的单个元素 问题 是否有从Optional到Stream的 链接 我尝试过 除其他外 return Optional ofNullable getMap
  • JAXB 枚举字段未序列化

    我有以下课程 package dictionary import java io Serializable import java util Objects import javax xml bind annotation XmlEleme
  • POJO 支持使用omnifaces 自动完成primefaces

    我正在尝试在我的项目中使用 primefaces 自动完成组件 以避免将特定转换器写入我尝试使用的每个列表对象全能面孔 http showcase omnifaces org converters ListConverter如建议的here
  • 列表框:添加组合框作为项目?

    是否可以将列表框的每个项目都作为组合框 我需要这个 因为我将列表框设置为可检查 然后我需要让用户从列表中每个元素的不同选项中进行选择 Thanks 如果您不打算分发您的应用程序 那么您还可以查看 TreeView 控件 请参阅此示例 COD

随机推荐

  • C、C++ 中\n、\t、\r的具体用法功能

    简单介绍 n 表示换行操作 光标会移动到下一行 next line t 表示水平制表空行操作 相当于Tab键 不会换行 r 相当于回车 相当于光标回到本行首位置 不会换行 用法实例演示 我们以一个9x9乘法表C 具体代码为例 演示一个三个的
  • 使用七牛云进行文件上传

    目录 一 七牛云入门测试 1 注册七牛云账号 完成后选择对象存储 2 在里面创建空间 一个空间相当于一个文件夹 就是将对象上传到的地方 3 查看个人秘钥 注册完成账号后 会有一个秘钥 上传文件的时候进行授权和认证 4 文件上传测试 二 封装
  • 汇编程序设计与计算机体系结构软件工程师教程笔记:汇编语法基础知识

    汇编程序设计与计算机体系结构 软件工程师教程 这本书是由Brain R Hall和Kevin J Slonka著 由爱飞翔译 中文版是2019年出版的 个人感觉这本书真不错 书中介绍了三种汇编器GAS NASM MASM异同 全部示例代码都
  • 2021.10.04 task9 react-hardhat

    2021 10 04 主要根据dapp learning的教程在学习 在学习task 9 hardhat react 的部分 区块链项目大部分用的都是 react 所以了解 react的基本机制也很重要 今天着重学习了react react
  • 测试报告和结果分析 —— allure整合pytest生成测试报告

    一 生成HTML测试报告的三种方式 1 unittest和HTMLTestRunner整合 2 allure和pytest整合 3 Jenkins中安装allure插件 Jenkins安装插件出错 不能正常使用 二 allure整合pyte
  • 知识图谱:语义网络、语义网、链接数据、知识图谱

    0 发展历程 1 语义网络 Semantic Networks 语义网络是由Quillian于上世纪60年代提出的知识表达模式 其用相互连接的节点和边来表示知识 节点表示对象 概念 边表示节点之间的关系 语义网络的优点 1 容易理解和展示
  • ubuntu系统中jupyterhub安装R内核集成rstudio

    需求 最后公司需要将原来用的Jupyter单用户版本改成Jupyterhub多用户版本 方便公司统一管理用户 并且因为平时工作会用到python和R的IDE 正好Jupyterhub可以满足需求 网上搜了很多 基本是三种方式 一种是通过k8
  • 公司后台管理系统搭建(Vue3+Vite+Element Plus+TypeScript+Pinia)

    前言 此次项目搭建选用 Vue3 Vite 并使用 pnpm 管理依赖包 本文将从下载到项目创建记录项目全过程 一 项目搭建 1 使用 npm 下载 pnpm 使用 pnpm 依赖包将被存放在一个统一的位置 因此可以节省大量的硬盘空间以及提
  • 自定义ViewGroup实现流式布局

    目录 1 View的绘制流程 2 自定义ViewGroup构造函数的作用 3 onMeasure 方法 3 1 View的度量方式 3 2 onMeasure方法参数的介绍 3 3 自定义ViewGroup onMeasure 方法的实现
  • HiveSQL原理和优化详解

    Hive SQL 编译成MapReduce过程 编译 SQL 的任务是在上节中介绍的 COMPILER 编译器组件 中完成的 Hive将SQL转化为MapReduce任务 整个编译过程分为六个阶段 词法 语法解析 Antlr 定义 SQL
  • javascript相关

    1 扁平数据结构转Tree 打平的数据内容如下 let arr id 1 name 部门1 pid 0 id 2 name 部门2 pid 1 id 3 name 部门3 pid 1 id 4 name 部门4 pid 3 id 5 nam
  • vscode编辑器插件总结

    之前一直用webstorm webstorm确实太重了 后来无意中发现了vscode 高颜值吸引了我哈哈哈 就一直用着 很喜欢VScode的插件功能 想要什么插件就搜索 比如搜索angular 只要点击一下某款插件 插件的介绍和用法都会在右
  • feign的Fallback机制

    对接口使用 FeignClient后声明feign客户端后 可以使用属性fallback指定异常处理类 这个类必须实现 FeignClient作用的接口 且被注入到容器中 FeignClient name service provider1
  • 浪潮

    这是一篇旧闻 是我2011年8月6日发在豆瓣上的 前几天重玩豆瓣 看到了 很多怀念 我感到了生命的浪潮 读西哲史有感 o 不会吧 浑浑噩噩的大学生活居然过去一半了啊 当年读 此间的少年 满以为大学就是乔峰 慕容复PK 令狐冲 杨康宿舍里面切
  • 测试分为什么,白盒,黑盒,单元,集成测试?

    一 为什么测试的概念这么多 一个软件项目就好比一部复杂的汽车 有很多零件 当每个零件生产完成后 就要测试零件是否存在质量问题 零件组成复杂的汽车后 我们还要测试汽车 比如著名的中保研 测试刹车 测试气囊 测试防撞 顾客从4s店购买汽车 要带
  • Vue学习(五)登陆页面之重置和发起登陆请求及弹窗提示

    Vue学习 五 登陆页面之重置和发起登陆请求及弹窗提示 表单重置 根据预验证结果决定是否发出登陆请求 编写代码 启动api服务器 弹窗提示 表单重置 直接调用element ui给我们写好的函数就可以了 获取当前表单的实例对象 通过这个实例
  • java中实现多态的机制是什么_java中实现多态的机制是什么? java什么是多态?

    学习java刚刚入门的小伙伴们 不知道大家在初次接触java中的多态一概念的时候 是否能清晰的讲出实现多态的机制是什么吗 什么才是java中的多态呢 多态性是指的面向对象程序设计代码重用的一个重要的机制 对于Java多态性 应该都不是第一次
  • Android Framework——进程间通讯学习,从Binder使用看起

    前言 Binder 是安卓中非常重要的进程间通讯工具 通过Binder 安卓在ServiceManager中对外提供了一系列的服务 学习Binder 将很好地为我们学习framework开个好头 Android 使用多进程 Android
  • 5分钟带你看懂Jeesite10大功能要点

    jeesite内容丰富 集成了大量优秀的组件 是一个值得研究的框架 它有 1 shiro安全权限控制 2 mybatis查询缓存接口扩展 3 ecache分布式缓存整合 4 页面资源缓存优化 5 多数据源灵活切换 6 mybatismapp
  • EasyExcel轻松读取Excel文件!

    EasyExcel是一个Java库 用于快速 简单地读写Excel文件 要使用EasyExcel 您首先需要将其添加为项目的依赖 如果使用Maven 可以添加以下依赖项