ThinkChat🤖让你学习和工作更高效,注册即送10W Token,即刻开启你的AI之旅 广告
![](https://img.kancloud.cn/3b/ef/3befa76ae26a96ffc6716394e20f18a2_1473x178.jpg) **1. 创建对应的实体类** 如果使用注解`@ExcelProperty`标记属性,则属性声明的顺序不必与表格中列的顺序一致。 ```java /** 1. 如果没有用注解@ExcelProperty,则声明属性的顺序要与表格中列的顺序一致 */ @Data public class Student { private String name; private Integer age; private String gender; private Integer total; } /** 2. 如果用注解@ExcelProperty,则声明属性的顺序不必与表格中列的顺序一致 */ @Data public class Student { @ExcelProperty(index = 3) private Integer total; @ExcelProperty(index = 2) private String gender; @ExcelProperty(index = 1) private Integer age; @ExcelProperty(index = 0) private String name; } /** 3. 也可以指定表头名称 */ @Data public class Student { @ExcelProperty("身高") private Integer total; @ExcelProperty("性别") private String gender; @ExcelProperty("年龄") private Integer age; @ExcelProperty("姓名") private String name; } ``` **2. 创建对应的监听器** ```java @Slf4j public class StudentExcelListener implements ReadListener<Student> { /** * 每读取表格中的一行时就会被调用一次 */ @Override public void invoke(Student student, AnalysisContext analysisContext) { log.info("invoke -> {}", student); //invoke -> Student(total=175, gender=男, age=25, name=张三) //invoke -> Student(total=179, gender=男, age=28, name=李四) //invoke -> Student(total=180, gender=男, age=35, name=王五) } /** * 当读取完表格所有的行后被调用 */ @Override public void doAfterAllAnalysed(AnalysisContext analysisContext) { log.info("doAfterAllAnalysed"); } } ``` **3. 调用`EasyExcel.read`方法读取表格** ```java @Test public void read01() { String path = this.getClass().getResource("/read/001.xlsx").getPath(); //读取第一个sheet, 文件流会自动关闭的 EasyExcel.read(path, Student.class, new StudentExcelListener()).sheet().doRead(); } ```