最近在做项目时,有遇到需要使用excel导入的场景,以前也有写过使用 Apache.poi 来解析导入数据,但整体解析逻辑比较繁琐,封装成工具类后也不是很好用(这个可能是我个人技术原因,和poi无关)。
这次开发时,在网上找了个更加简洁的方式,即通过使用 alibaba 的 easyExcel 来解析,整个过程更加友好,不管是获取标题、每一行数据还是整体的结果,都更加便利,不需要关心解析逻辑,只要按需实现我们自身的业务逻辑就好。以下为我个人对此整理的一个简单示例:
一、导包
<!--easyExcel-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>3.0.5</version>
</dependency>
二、代码实现
public static List<Map> readExcel(FileInputStream fileInputStream) {
List<Map> resultList = new ArrayList<>();
EasyExcel.read(fileInputStream,new AnalysisEventListener<Map<Integer, String>>() {
private Map<Integer, String> headMap;
//获取标题数据
@Override
public void invokeHeadMap(Map<Integer, String> headMap, AnalysisContext context) {
this.headMap = headMap;
System.out.println("解析到的表头数据: " + headMap);
}
//处理每一行数据
@Override
public void invoke(Map<Integer, String> rowData, AnalysisContext context) {
//把key替换成标题
Map temp = new HashMap();
for (Map.Entry<Integer, String> entry : rowData.entrySet()) {
temp.put(headMap.get(entry.getKey()), entry.getValue());
}
resultList.add(temp);
}
@Override
public void doAfterAllAnalysed(AnalysisContext context) {
//所有行都解析完成
}
}).headRowNumber(2).sheet().doRead();
return resultList;
}