EasyExcel:pom 包
<dependency> <groupId>com.alibaba</groupId> <artifactId>easyexcel</artifactId> <version>3.0.5</version> </dependency>
创建工具类:EasyExcelUtil
public static <T> List<T> read(InputStream inputStream, final Class<?> clazz,Map<Integer,String> head) throws Exception {
if (inputStream == null) {
throw new Exception("解析出错了,文件流是null");
}
// 有个很重要的点 DataListener 不能被spring管理,要每次读取excel都要new,然后里面用到spring可以构造方法传进去
DataListener<T> listener = new DataListener<>();
EasyExcel.read(inputStream, clazz, listener).sheet().doRead();
head.putAll(listener.getHead());
return listener.getRows();
}
class DataListener<T> extends AnalysisEventListener<T> {//内部类 private final List<T> rows = new ArrayList<>(); private Map<Integer, String> head = new HashMap<>(); @Override public void invoke(T t, AnalysisContext analysisContext) { rows.add(t); } @Override public void doAfterAllAnalysed(AnalysisContext context) { log.info("解析完成!读取{}行", rows.size()); } @Override public void invokeHeadMap(Map<Integer, String> headMap, AnalysisContext context) { head.putAll(headMap); } public List<T> getRows() { return rows; } public Map<Integer, String> getHead() { return head; } }
调用:
Map<Integer,String> head = new HashMap<>();
List<BatchSampleALLVO> list = EasyExcelUtil.read(inputStream, BatchSampleALLVO.class,head);
重写:AnalysisEventListener方法,将数据暴露给调用者。