Browse Source

Merge cd8386e5a4 into aae9c61ab6

pull/3202/merge
Xuan-Zhang Gong 5 months ago committed by GitHub
parent
commit
287476ae5f
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
  1. 18
      easyexcel-core/src/main/java/com/alibaba/excel/analysis/ExcelAnalyserImpl.java
  2. 55
      easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/issue3195/Issue3159Test.java

18
easyexcel-core/src/main/java/com/alibaba/excel/analysis/ExcelAnalyserImpl.java

@ -12,14 +12,15 @@ import com.alibaba.excel.context.xlsx.DefaultXlsxReadContext;
import com.alibaba.excel.context.xlsx.XlsxReadContext;
import com.alibaba.excel.exception.ExcelAnalysisException;
import com.alibaba.excel.exception.ExcelAnalysisStopException;
import com.alibaba.excel.read.listener.ReadListener;
import com.alibaba.excel.read.metadata.ReadSheet;
import com.alibaba.excel.read.metadata.ReadWorkbook;
import com.alibaba.excel.read.metadata.holder.ReadSheetHolder;
import com.alibaba.excel.read.metadata.holder.ReadWorkbookHolder;
import com.alibaba.excel.read.metadata.holder.csv.CsvReadWorkbookHolder;
import com.alibaba.excel.read.metadata.holder.xls.XlsReadWorkbookHolder;
import com.alibaba.excel.read.metadata.holder.xlsx.XlsxReadWorkbookHolder;
import com.alibaba.excel.support.ExcelTypeEnum;
import com.alibaba.excel.util.ClassUtils;
import com.alibaba.excel.util.DateUtils;
import com.alibaba.excel.util.FileUtils;
import com.alibaba.excel.util.NumberDataFormatterUtils;
@ -126,6 +127,7 @@ public class ExcelAnalyserImpl implements ExcelAnalyser {
if (LOGGER.isDebugEnabled()) {
LOGGER.debug("Custom stop!");
}
callBackCustomListener(analysisContext);
}
} catch (RuntimeException e) {
finish();
@ -213,7 +215,6 @@ public class ExcelAnalyserImpl implements ExcelAnalyser {
private void removeThreadLocalCache() {
NumberDataFormatterUtils.removeThreadLocalCache();
DateUtils.removeThreadLocalCache();
ClassUtils.removeThreadLocalCache();
}
private void clearEncrypt03() {
@ -233,4 +234,17 @@ public class ExcelAnalyserImpl implements ExcelAnalyser {
public AnalysisContext analysisContext() {
return analysisContext;
}
/**
* custom listener call back should be execute when ExcelAnalysisStopException
*
* @see ExcelAnalysisStopException
**/
private void callBackCustomListener(AnalysisContext analysisContext) {
ReadSheetHolder readSheetHolder = analysisContext.readSheetHolder();
for (ReadListener<?> readListener : readSheetHolder.readListenerList()) {
readListener.doAfterAllAnalysed(analysisContext);
}
}
}

55
easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/issue3195/Issue3159Test.java

@ -0,0 +1,55 @@
package com.alibaba.easyexcel.test.temp.issue3195;
import com.alibaba.easyexcel.test.util.TestFileUtil;
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;
import lombok.extern.slf4j.Slf4j;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import java.io.File;
import java.util.Map;
@Slf4j
public class Issue3159Test {
/**
* 当用户手动停止执行时doAfterAllAnalysed方法应该仍然回调
**/
@Test
public void callBackRead() {
String fileName = TestFileUtil.getPath() + "demo" + File.separator + "demo.xlsx";
ModifyHasNextListener listener = new ModifyHasNextListener();
EasyExcel.read(fileName, listener).doReadAll();
Assertions.assertTrue(listener.willTure);
}
public static class ModifyHasNextListener extends AnalysisEventListener<Map<Integer, String>> {
boolean hasNext = true;
boolean willTure = false;
@Override
public void invoke(Map<Integer, String> data, AnalysisContext context) {
if (!hasNext) {
return;
}
hasNext = false;
}
@Override
public void doAfterAllAnalysed(AnalysisContext context) {
willTure = true;
}
@Override
public boolean hasNext(AnalysisContext context) {
return hasNext;
}
}
}
Loading…
Cancel
Save