社群运营,优化设计三年级下册数学答案,网站建设中 切片指什么,深圳 网站设计师 招聘EasyExcel简单实例 准备工作场景一#xff1a;读取 Student 表需求1#xff1a;简单读取需求2#xff1a;读取到异常信息时不中断需求3#xff1a;读取所有的sheet工作表需求4#xff1a;读取指定的sheet工作表需求5#xff1a;从指定的行开始读取 场景二#xff1a;写入… EasyExcel简单实例 准备工作场景一读取 Student 表需求1简单读取需求2读取到异常信息时不中断需求3读取所有的sheet工作表需求4读取指定的sheet工作表需求5从指定的行开始读取 场景二写入 Student 表需求1简单写入 准备工作
导入easyExcel依赖注意版本 dependencygroupIdcom.alibaba/groupIdartifactIdeasyexcel/artifactIdversion3.1.1/version/dependency场景一读取 Student 表
需求1简单读取
源表
1. 编写实体类 可以使用 ExcelProperty 指定数据封装为实体类对象的规则后面可以跟index 和 列名二选一 若不加注解则按照默认封装规则 ①根据 Excel 列与实体类属性的顺序②根据 Excel 列的单元格式与对象字段类型匹配。
Data
public class Student {ExcelProperty(姓名)private String name;ExcelProperty(年级)private String grade;ExcelProperty(年龄)private int age;
}2. 监听器 invoke()每读取一行就执行的方法每一行数据会被封装成一个 student 对象(invoke方法的第一个参数) doAfterAllAnalysed()读取结束后执行的方法
class studentListener implements ReadListenerStudent {int i1;Overridepublic void invoke(Student student, AnalysisContext context) {System.out.println(读取到第 (i) 行:student);}Overridepublic void doAfterAllAnalysed(AnalysisContext context) {System.out.println(\nxlsx文件读取结束);}
}3. 测试类 read()读取workbook工作簿传入文件路径、实体类、监听器 sheet()选定读取的工作表默认读取第一个 doRead()执行读操作
public class easyExcelTest {Testpublic void readTest() {String filePath C:\\Users\\liziq\\Desktop\\student.xlsx;EasyExcel.read(filePath,Student.class,new studentListener()).sheet().doRead();}
}打印效果
需求2读取到异常信息时不中断
源表 当出现了不符合数据类型的数据时希望不中断读取 1. 实体类 不变 2. 监听器 只需要调整监听器在监听器加入 onException()方法
class studentListener implements ReadListenerStudent {int i 1;Overridepublic void invoke(Student student, AnalysisContext context) {System.out.println(读取到第 (i) 行: student);}Overridepublic void doAfterAllAnalysed(AnalysisContext context) {System.out.println(\nxlsx文件读取结束);}Overridepublic void onException(Exception exception, AnalysisContext context) throws Exception {System.out.println(读取异常exception);}
}3. 测试类 不变
打印效果 异常数据被打印且不中断读取
需求3读取所有的sheet工作表
源表 此时多个sheet都有数据
1. 实体类 不变 2. 监听器 不变 3. 测试类 将sheet().doRead改为 doReadAll()
public class easyExcelTest {Testpublic void readTest() {String filePath C:\\Users\\liziq\\Desktop\\student.xlsx;EasyExcel.read(filePath,Student.class,new studentListener()).doReadAll();}
}效果 读取到了两个sheet的数据
需求4读取指定的sheet工作表
源表 此时多个sheet都有数据
1. 实体类 不变 2. 监听器 不变 3. 测试类 在sheet()中传递指定sheet的index索引或者名称即可
public class easyExcelTest {Testpublic void readTest() {String filePath C:\\Users\\liziq\\Desktop\\student.xlsx;EasyExcel.read(filePath,Student.class,new studentListener()).sheet(Sheet2).doRead();EasyExcel.read(filePath,Student.class,new studentListener()).sheet(Sheet1).doRead();}
}效果 此时先指定读取sheet2再读取sheet1
需求5从指定的行开始读取
源表 假设此时有多行表头内容需要从第3行开始读取
1. 实体类 不变 2. 监听器 不变 3. 测试类 使用 headRowNumber()参数中填写开始读取的行数默认从第2行开始读取即headRowNumber()默认参数是索引1 此时读取的内容要从第3行开始索引为2所以填入headRowNumber()的参数为2
public class easyExcelTest {Testpublic void readTest() {String filePath C:\\Users\\liziq\\Desktop\\student.xlsx;EasyExcel.read(filePath,Student.class,new studentListener()).sheet(Sheet1).headRowNumber(2).doRead();}
}效果
场景二写入 Student 表
需求1简单写入
1. 实体类 需要比读取excel多添加实体类的构造函数
Data
public class Student {ExcelProperty(姓名)private String name;ExcelProperty(年级)private String grade;ExcelProperty(年龄)private int age;public Student(){}public Student(String name, String grade, int age) {this.name name;this.grade grade;this.age age;}
}2. 模拟建数据的类 将每一行数据封装为Student对象并放入一个List集合中
class CreateData{public static ListStudent create(){ListStudent datas Arrays.asList(new Student(张三,一年级,23),new Student(里斯,一年级,19),new Student(王五,一年级,22),new Student(赵六,一年级,21));return datas;}
}3. 测试类 写的时候会自动将实体类的属性作为excel表的表头 sheet()的参数为写入的工作表 doWrite()的参数为要写入的数据要求格式为Collection集合类型
public class easyExcelTest {Testpublic void writeTest() {String filePath C:\\Users\\liziq\\Desktop\\student.xlsx;EasyExcel.write(filePath,Student.class).sheet(学生表1).doWrite(CreateData.create()); // doWrite()的参数为 Collection 集合}效果 成功生成指定sheet表的数据