EasyExcel.read读取 Excel 文件
EasyExcel.read读取 Excel 文件
-
基本概念
EasyExcel.read
是 EasyExcel 库中的一个重要功能,用于读取 Excel 文件。EasyExcel 是一个基于 Java 的简单、高效的 Excel 处理工具,它可以让开发者更加方便地读取和写入 Excel 文件,避免了使用传统的Apache POI
处理 Excel 时复杂的操作和高内存占用的问题。
-
使用步骤
-
第一步:添加依赖
- 首先需要在项目的
pom.xml
(如果是 Maven 项目)中添加 EasyExcel 的依赖。例如:
<dependency> <groupId>com.alibaba</groupId> <artifactId>easyexcel</artifactId> <version>3.1.1</version> </dependency>
- 这一步确保项目能够使用 EasyExcel 相关的类和功能。
- 首先需要在项目的
-
第二步:定义数据模型(实体类)
- 需要创建一个 Java 实体类来映射 Excel 文件中的数据。例如,如果 Excel 文件中有姓名和年龄两列,实体类可以定义如下:
import com.alibaba.excel.annotation.ExcelProperty; import lombok.Data; @Data public class User { @ExcelProperty("姓名") private String name; @ExcelProperty("年龄") private int age; }
- 这里的
@ExcelProperty
注解用于指定 Excel 列的标题与实体类属性的对应关系。
-
第三步:读取 Excel 文件
- 可以使用
EasyExcel.read
方法来读取 Excel 文件。例如:
import com.alibaba.excel.EasyExcel; import java.io.File; import java.util.ArrayList; import java.util.List; public class ExcelReader { public static void main(String[] args) { String fileName = "your_excel_file_path.xlsx"; List<User> userList = new ArrayList<>(); EasyExcel.read(new File(fileName), User.class, new AnalysisEventListener<User>() { @Override public void invoke(User user, AnalysisContext analysisContext) { userList.add(user); } @Override public void doAfterAllAnalysed(AnalysisContext analysisContext) { System.out.println("读取完成,数据列表:"); for (User user : userList) { System.out.println("姓名:" + user.getName() + ",年龄:" + user.getAge()); } } }).sheet().doRead(); } }
- 在这个例子中,
EasyExcel.read
方法接收三个参数:Excel 文件(可以是File
对象或者文件路径)、数据模型的类(这里是User.class
)和一个AnalysisEventListener
。 AnalysisEventListener
是一个回调接口,用于处理读取到的每一行数据和读取完成后的操作。invoke
方法会在读取每一行数据时被调用,将数据添加到userList
中。doAfterAllAnalysed
方法在整个 Excel 文件读取完成后被调用,用于打印出读取的数据列表。
- 可以使用
-
-
高级功能
-
读取指定列或行
- 可以通过
ReadSheet
对象来指定读取 Excel 文件中的特定列或行。例如,要只读取第一列和第三列的数据,可以这样设置:
ReadSheet readSheet = EasyExcel.readSheet().build(); readSheet.setHeadRowNumber(0); // 设置表头所在行数 readSheet.setSelectedColumns(0, 2); // 选择第1列和第3列(列索引从0开始) EasyExcel.read(new File(fileName), User.class, new AnalysisEventListener<User>() { //... }).sheet(readSheet).doRead();
- 可以通过
-
大数据量读取
- EasyExcel 在处理大数据量 Excel 文件时有很好的性能。它采用了逐行读取的方式,避免了一次性将整个 Excel 文件数据加载到内存中。在读取大量数据时,可以通过调整
batchSize
参数来控制每次读取的数据行数,进一步优化性能。例如:
EasyExcel.read(new File(fileName), User.class, new AnalysisEventListener<User>() { @Override public void invoke(User user, AnalysisContext analysisContext) { //... } @Override public void doAfterAllAnalysed(AnalysisContext analysisContext) { //... } }).sheet().headRowNumber(0).doRead();
- 这里可以在
AnalysisEventListener
的invoke
方法中对每一批次的数据进行处理,如插入数据库等操作,从而高效地处理大量 Excel 数据。
- EasyExcel 在处理大数据量 Excel 文件时有很好的性能。它采用了逐行读取的方式,避免了一次性将整个 Excel 文件数据加载到内存中。在读取大量数据时,可以通过调整
-