Java使用easyExcel实现Excel文件解析

 更新时间:2025年02月11日 09:22:57   作者:众乐乐_2008  
这篇文章主要为大家详细介绍了Java如何使用easyExcel实现Excel文件解析,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下

要使提供的 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 的工作流程

逐行读取数据:

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

批量处理:

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

全部数据解析完成后:

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

5. 完整代码示例

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

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;
    }
 
    @Override
    public 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;
 
    @Override
    public void invoke(ExcelMode data, AnalysisContext context) {
        System.out.println("解析到一条数据: { " + data.toString() + " }");
        list.add(data);
        count++;
        if (list.size() >= BATCH_COUNT) {
            saveData(count);
            list.clear();
        }
    }
 
    @Override
    public 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 文件,能够在保证内存高效的同时,还能进行批量数据的持久化操作。

到此这篇关于Java使用easyExcel实现Excel文件解析的文章就介绍到这了,更多相关Java easyExcel解析Excel内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 详解JVM类加载机制及类缓存问题的处理方法

    详解JVM类加载机制及类缓存问题的处理方法

    这篇文章主要给大家介绍了关于JVM类加载机制及类缓存问题的处理方法的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。
    2018-01-01
  • java 嵌套类的详解及实例代码

    java 嵌套类的详解及实例代码

    这篇文章主要介绍了java 嵌套类的详解及实例代码的相关资料,需要的朋友可以参考下
    2017-03-03
  • Spring Security+JWT如何实现前后端分离权限控制

    Spring Security+JWT如何实现前后端分离权限控制

    本篇将手把手教你用 Spring Security + JWT 搭建一套完整的登录认证与权限控制体系,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-04-04
  • Java中多个线程交替循环执行的实现

    Java中多个线程交替循环执行的实现

    有些时候面试官经常会问,两个线程怎么交替执行呀,本文就来详细的介绍一下Java中多个线程交替循环执行的实现,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起学习学习吧
    2024-01-01
  • 关于Java实现word(docx、doc)转html的完美解决方案

    关于Java实现word(docx、doc)转html的完美解决方案

    文章介绍了多种将Word文档转换为HTML的方法,包括使用Microsoft Word自带的导出功能、第三方工具和编程实现,展示了如何实现将.docx文件转换为HTML文件,并自动生成目录、处理分页符和增强表格样式等功能,感兴趣的朋友一起看看吧
    2025-01-01
  • SpringBoot 枚举类型的自动转换的实现

    SpringBoot 枚举类型的自动转换的实现

    一般我们在数据库都会定义数值型的枚举常量,不管是序列化还是反序列化都是需要我们手动去转换成枚举类型的,本文主要介绍了Spring Boot 枚举类型的自动转换,感兴趣的可以了解一下
    2022-03-03
  • 当Mybatis遇上目录树超全完美解决方案

    当Mybatis遇上目录树超全完美解决方案

    这篇文章主要介绍了当Mybatis遇上目录树有哪些解决方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-04-04
  • java8中NIO缓冲区(Buffer)的数据存储详解

    java8中NIO缓冲区(Buffer)的数据存储详解

    在本篇文章中小编给大家分享了关于java8中NIO缓冲区(Buffer)的数据存储的相关知识点,需要的朋友们参考下。
    2019-04-04
  • Java视频断点上传的实现示例

    Java视频断点上传的实现示例

    断点续传指的是在下载或上传时,将下载或上传任务人为的划分为几个部分,本文主要介绍了Java视频断点上传的实现示例,具有一定的参考价值,感兴趣的可以了解一下
    2024-05-05
  • JDK8中新增的Optional工具类基本使用

    JDK8中新增的Optional工具类基本使用

    Optional不是对null关键字的一种替代,而是对于null判定提供了一种更加优雅的实现,接下来通过本文给大家分享JDK8中新增的Optional工具类基本使用,感兴趣的朋友跟随小编一起看看吧
    2021-06-06

最新评论