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内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 详解Java编写算法时如何加快读写数据速度

    详解Java编写算法时如何加快读写数据速度

    这篇文章主要为大家详细介绍了Java在编写算法时如何加快读写数据速度,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2024-03-03
  • 10张图总结出并发编程最佳学习路线

    10张图总结出并发编程最佳学习路线

    这篇文章主要介绍了并发编程的最佳学习路线,文中通过图片介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-08-08
  • SpringBoot + Vue + ElementUI 实现 el-table 分页功能(详细步骤)

    SpringBoot + Vue + ElementUI 实现 el-table 分页功能(详细步骤)

    本文详细介绍了使用SpringBoot和Vue.js结合ElementUI实现分页功能的数据表格,从后端分页逻辑到前端展示和状态管理,全面解析如何高效处理大量数据,提升用户体验与系统性能,感兴趣的朋友跟随小编一起看看吧
    2024-09-09
  • GSON框架下将百度天气JSON数据转JavaBean

    GSON框架下将百度天气JSON数据转JavaBean

    这篇文章主要为大家详细介绍了如何在GSON框架下实现将百度天气JSON数据转JavaBean,文中的示例代码讲解详细,感兴趣的小伙伴可以了解下
    2025-08-08
  • Spring中的IOC深度解读

    Spring中的IOC深度解读

    这篇文章主要介绍了Spring中的IOC深度解读,spring容器会创建和组装好清单中的对象,然后将这些对象存放在spring容器中,当程序中需要使用的时候,可以到容器中查找获取,然后直接使用,需要的朋友可以参考下
    2023-09-09
  • Spring aop+反射实现电话号加密

    Spring aop+反射实现电话号加密

    线上项目涉及大量查询接口中,存在电话号明文展示不合规的问题。如果对每个接口返回结果中电话号相关字段修改相关代码逻辑,则工作量较大花费时间多。因此设计电话号加密注解,减少工作量。
    2021-06-06
  • java8中Stream的使用以及分割list案例

    java8中Stream的使用以及分割list案例

    这篇文章主要介绍了java8中Stream的使用以及分割list案例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-08-08
  • 注解、原生Spring、SchemaBased三种方式实现AOP代码案例

    注解、原生Spring、SchemaBased三种方式实现AOP代码案例

    这篇文章主要介绍了注解、原生Spring、SchemaBased三种方式实现AOP的方法介绍,文中有详细的代码示例,对我们的学习有一定的帮助,需要的朋友可以参考下
    2023-06-06
  • Spring事件监听基本原理与使用详解

    Spring事件监听基本原理与使用详解

    这篇文章主要介绍了Spring事件监听基本原理与使用详解,Spring的事件监听机制和发布订阅机制是很相似的:发布了一个事件后,监听该类型事件的所有监听器会触发相应的处理逻辑,需要的朋友可以参考下
    2024-01-01
  • Java实现Excel转PDF的两种方法详解

    Java实现Excel转PDF的两种方法详解

    使用具将Excel转为PDF的方法有很多,在这里我给大家介绍两种常用的方法:使用spire转化PDF、使用jacob实现Excel转PDF,分别应对两种不一样的使用场景,需要的可以参考一下
    2022-01-01

最新评论