Java使用easyExcel实现Excel文件解析

要使提供的 ExcelModelListener 类来解析 Excel 文件并实现批量存储数据库的功能,需要结合 EasyExcel 库来读取 Excel 数据。具体来说,可以使用 EasyExcel.read() 方法来读取 Excel 文件,并指定 ExcelModelListener 作为事件监听器。

下面是调用 ExcelModelListener 进行 Excel 文件解析的完整示例代码:

1. 首先,确保已经添加了 EasyExcel 依赖

如果你还没有在 Maven 项目中引入 EasyExcel,可以在 pom.xml 文件中添加如下依赖:

1
com.alibabaeasyexcel3.0.5

2. 调用 ExcelModelListener 的代码

假设你有一个 Excel 文件 data.xlsx,并且 ExcelMode 是与 Excel 数据对应的 Java 类,你可以按照以下步骤来调用监听器解析 Excel 文件:

ExcelMode 类示例(简化版)

1
2
3
4
5
6
7
8
9
10
package com.zh.oukele.model;
  
public class ExcelMode {
  
    private String field1;
    private String field2;
    // 这里是你Excel中每一列的对应字段
  
    // 省略getter和setter
}

使用 ExcelModelListener 解析 Excel 文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
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(主要的类)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
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 {
  
    private static final int BATCH_COUNT = 5;
    List list = new ArrayList();
    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(调用和执行)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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内容请搜索IT俱乐部以前的文章或继续浏览下面的相关文章希望大家以后多多支持IT俱乐部!

本文收集自网络,不代表IT俱乐部立场,转载请注明出处。https://www.2it.club/code/java/14849.html
上一篇
下一篇
联系我们

联系我们

在线咨询: QQ交谈

邮箱: 1120393934@qq.com

工作时间:周一至周五,9:00-17:30,节假日休息

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部