导入easyExcel依赖,注意版本:
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>3.1.1</version>
</dependency>
目标表:
1. 编写实体类
可以使用 @ExcelProperty
强制读取某列,后面可以跟index 和 列名(二选一);
若不加注解则自动根据列的顺序对应实体类的属性;
@Data
public class Student {
@ExcelProperty("姓名")
private String name;
@ExcelProperty("年级")
private String grade;
@ExcelProperty("年龄")
private int age;
}
2. 监听器
invoke()
:每读取一行就执行的方法,每一行数据会被封装成一个 student 对象(invoke方法的第一个参数);
doAfterAllAnalysed()
:读取结束后执行的方法;
class studentListener implements ReadListener<Student> {
int i=1;
@Override
public void invoke(Student student, AnalysisContext context) {
System.out.println("读取到第 "+(i++)+" 行:"+student);
}
@Override
public void doAfterAllAnalysed(AnalysisContext context) {
System.out.println("\nxlsx文件读取结束");
}
}
3. 测试类
read()
:读取workbook工作簿,传入文件路径、实体类、监听器;
sheet()
:选定读取的工作表,默认读取第一个;
doRead()
:执行读操作;
public class easyExcelTest {
@Test
public void studentTest() {
String filePath = "C:\\Users\\liziq\\Desktop\\student.xlsx";
EasyExcel.read(filePath,
Student.class,
new studentListener()).
sheet().
doRead();
}
}
效果: