前言
开发中,对于开发者而言跟Excel打交道似乎是无可避免的,特别是代码和Excel之间数据的交互上。现在主流的poi工具有很多,但是在性能上、易用性上或多或少会存在一些小小的不足,于是alibaba开源工具easyexcel诞生了。
在使用easyexcel的时候,自己也遇到了一些坑,自己百度了很久都没人提到这个问题,于是自己看着源码一步一步解决了这个问题,同时也在这分享出来参考!
实战
1、导入一个相关依赖即可!
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>2.0.0-beta6</version>
</dependency>
2、读取(上传)Excel文件,使用上非常的简单,只要几行代码。
public class EasyExcelDemo {
public static void main(String[] args) {
String path = "E:\\tmp\\demo.xlsx";
// 自定义读取每一行数据的事件监听
ReadListen readListen = new ReadListen();
// 开始读取Excel数据
ExcelReader reader = EasyExcel.read(path, readListen).build();
// 读取第一个sheet,readSheet默认是读取第一个,可以自定义
ReadSheet readSheet = EasyExcel.readSheet().build();
// 开始读取数据
reader.read(readSheet);
// 这里千万别忘记关闭,读的时候会创建临时文件,到时磁盘会崩的
reader.finish();
}
}
3、自定义ReadListen
,主要是为了装数据,方便获取和使用,具体怎么调到这个方法的,以及出现的问题点在哪,往下走。。。
public class ReadListen<T> extends AnalysisEventListener<T> {
private List<T> sheetData = new ArrayList<>(10);
@Override
public void invoke(T t, AnalysisContext analysisContext) {
sheetData.add(t);
System.out.println(t);
}
@Override
public void doAfterAllAnalysed(AnalysisContext analysisContext) {
// Excel数据解析完成后,想要实现的业务逻辑
System.out.println("excel data resolve finish!!!");
}
}
4、开始源码分析,easyexcel怎么读取数据,以及问题点分析解决!
4.1 当调用reader.read(readSheet);
时,进入
public ExcelReader read(ReadSheet readSheet) {
checkFinished();
// 开始进入解析sheet
excelAnalyser.analysis(readSheet);
return this;
}
我们只要分析excelAnalyser.analysis(readSheet);
,进入继续
analysisContext.currentSheet(excelExecutor, readSheet);
try {
// 真正解析sheet表格的地方
excelExecutor.execute();
} catch (ExcelAnalysisStopException e) {
if (LOGGER.isDebugEnabled()