今天来回顾一下easyExcel如何读excel
- 导入jar包
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>2.2.6</version>
</dependency>
第一种写法:
代码语言:javascript复制 @Test
public void test01(){
// 获取ExcelReaderBuilder对象
ExcelReaderBuilder readerBuilder = EasyExcel.read();
//读取的文件位置
readerBuilder.file("D:\test.xlsx");
// 自动关闭流
readerBuilder.autoCloseStream(true);
//读取哪张表
readerBuilder.sheet("工作表");
// excel的格式
readerBuilder.excelType(ExcelTypeEnum.XLSX);
// 注册监听器
readerBuilder.registerReadListener(new AnalysisEventListener<Map<Integer,String>>() {
@Override
public void invoke(Map<Integer, String> integerStringMap, AnalysisContext analysisContext) {
Set<Integer> set = integerStringMap.keySet();
Iterator<Integer> iterator = set.iterator();
while(iterator.hasNext()){
Integer key = iterator.next();
System.out.println(key ":" integerStringMap.get(key) ",");
}
}
@Override
public void doAfterAllAnalysed(AnalysisContext analysisContext) {
// 通知文件读取完毕
System.out.println("读取完毕");
}
});
// 读取数据
ExcelReader reader = readerBuilder.build();
reader.readAll();
reader.finish();
}
简写的方式
代码语言:javascript复制 @Test
public void test02(){
List<Map<Integer,String>> list = new LinkedList<>();
EasyExcel.read().file("D:\test.xlsx").sheet("工作表")
.registerReadListener(new AnalysisEventListener<Map<Integer, String>>() {
@Override
public void invoke(Map<Integer, String> integerStringMap, AnalysisContext analysisContext) {
list.add(integerStringMap);
}
@Override
public void doAfterAllAnalysed(AnalysisContext analysisContext) {
}
}).doRead();
List<Demo> li = new ArrayList<>();
for(Map<Integer,String> integerStringMap :list){
Set<Integer> set = integerStringMap.keySet();
Iterator<Integer> iterator = set.iterator();
while (iterator.hasNext()){
Integer key = iterator.next();
System.out.println(key ":" integerStringMap.get(key) " ,");
}
}
}
将excel中的数据映射到对象中,并返回list
代码语言:javascript复制 @Test
public void test03(){
List<Demo> list = new LinkedList<>();
EasyExcel.read().file("D:\test.xlsx").sheet().headRowNumber(2) // 从第二行开始读
.head(Demo.class)
.registerReadListener(new AnalysisEventListener<Demo>() {
@Override
public void invoke(Demo demo, AnalysisContext analysisContext) {
list.add(demo);
}
@Override
public void doAfterAllAnalysed(AnalysisContext analysisContext) {
}
}).doRead();
for(Demo demo : list){
System.out.println(demo);
}
}
Demo实体类的写法
代码语言:javascript复制public class Demo {
@ExcelProperty("姓名")
private String name;
@ExcelProperty("年龄")
private String age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
@Override
public String toString() {
return "Demo{"
"name='" name '''
", age='" age '''
'}';
}
}
说明:Demo实体类中的字段命名必须是驼峰命名法,如果不是则无法将数据封装进去