diff --git a/easyexcel-core/src/main/java/com/alibaba/excel/analysis/v03/XlsSaxAnalyser.java b/easyexcel-core/src/main/java/com/alibaba/excel/analysis/v03/XlsSaxAnalyser.java index 5fdae31b1..2866a7de8 100644 --- a/easyexcel-core/src/main/java/com/alibaba/excel/analysis/v03/XlsSaxAnalyser.java +++ b/easyexcel-core/src/main/java/com/alibaba/excel/analysis/v03/XlsSaxAnalyser.java @@ -171,6 +171,7 @@ public void processRecord(Record record) { log.debug("Custom stop!", e); } xlsReadContext.xlsReadWorkbookHolder().setIgnoreRecord(Boolean.TRUE); + xlsReadContext.xlsReadWorkbookHolder().setCurrentSheetStopped(Boolean.TRUE); } } diff --git a/easyexcel-core/src/main/java/com/alibaba/excel/analysis/v03/handlers/BofRecordHandler.java b/easyexcel-core/src/main/java/com/alibaba/excel/analysis/v03/handlers/BofRecordHandler.java index 3e6713c41..a05568ee6 100644 --- a/easyexcel-core/src/main/java/com/alibaba/excel/analysis/v03/handlers/BofRecordHandler.java +++ b/easyexcel-core/src/main/java/com/alibaba/excel/analysis/v03/handlers/BofRecordHandler.java @@ -49,6 +49,7 @@ public void processRecord(XlsReadContext xlsReadContext, Record record) { } else { xlsReadContext.xlsReadWorkbookHolder().setIgnoreRecord(Boolean.TRUE); } + xlsReadContext.xlsReadWorkbookHolder().setCurrentSheetStopped(Boolean.FALSE); // Go read the next one xlsReadWorkbookHolder.setReadSheetIndex(xlsReadWorkbookHolder.getReadSheetIndex() + 1); } diff --git a/easyexcel-core/src/main/java/com/alibaba/excel/analysis/v03/handlers/EofRecordHandler.java b/easyexcel-core/src/main/java/com/alibaba/excel/analysis/v03/handlers/EofRecordHandler.java index 5593de12c..6e162028e 100644 --- a/easyexcel-core/src/main/java/com/alibaba/excel/analysis/v03/handlers/EofRecordHandler.java +++ b/easyexcel-core/src/main/java/com/alibaba/excel/analysis/v03/handlers/EofRecordHandler.java @@ -24,9 +24,18 @@ public void processRecord(XlsReadContext xlsReadContext, Record record) { if (xlsReadContext.readSheetHolder() == null) { return; } + + //Represents the current sheet does not need to be read or the user manually stopped reading the sheet. + if (BooleanUtils.isTrue(xlsReadContext.xlsReadWorkbookHolder().getIgnoreRecord())) { + // When the user manually stops reading the sheet, the method to end the sheet needs to be called. + if (BooleanUtils.isTrue(xlsReadContext.xlsReadWorkbookHolder().getCurrentSheetStopped())) { + xlsReadContext.analysisEventProcessor().endSheet(xlsReadContext); + } + return; + } + // Sometimes tables lack the end record of the last column - if (BooleanUtils.isNotTrue(xlsReadContext.xlsReadWorkbookHolder().getIgnoreRecord()) - && !xlsReadContext.xlsReadSheetHolder().getCellMap().isEmpty()) { + if (!xlsReadContext.xlsReadSheetHolder().getCellMap().isEmpty()) { XlsReadSheetHolder xlsReadSheetHolder = xlsReadContext.xlsReadSheetHolder(); // Forge a termination data xlsReadContext.readRowHolder(new ReadRowHolder(xlsReadContext.xlsReadSheetHolder().getRowIndex() + 1, diff --git a/easyexcel-core/src/main/java/com/alibaba/excel/read/metadata/holder/xls/XlsReadWorkbookHolder.java b/easyexcel-core/src/main/java/com/alibaba/excel/read/metadata/holder/xls/XlsReadWorkbookHolder.java index a8c86a757..da7d87e05 100644 --- a/easyexcel-core/src/main/java/com/alibaba/excel/read/metadata/holder/xls/XlsReadWorkbookHolder.java +++ b/easyexcel-core/src/main/java/com/alibaba/excel/read/metadata/holder/xls/XlsReadWorkbookHolder.java @@ -3,6 +3,10 @@ import java.util.ArrayList; import java.util.List; +import lombok.EqualsAndHashCode; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; import org.apache.poi.hssf.eventusermodel.FormatTrackingHSSFListener; import org.apache.poi.hssf.record.BoundSheetRecord; import org.apache.poi.hssf.usermodel.HSSFWorkbook; @@ -17,6 +21,10 @@ * * @author Jiaju Zhuang */ +@Getter +@Setter +@EqualsAndHashCode +@NoArgsConstructor public class XlsReadWorkbookHolder extends ReadWorkbookHolder { /** * File System @@ -47,6 +55,11 @@ public class XlsReadWorkbookHolder extends ReadWorkbookHolder { */ private Boolean ignoreRecord; + /** + * Has the current sheet already stopped + */ + private Boolean currentSheetStopped; + public XlsReadWorkbookHolder(ReadWorkbook readWorkbook) { super(readWorkbook); this.boundSheetRecordList = new ArrayList(); @@ -56,61 +69,6 @@ public XlsReadWorkbookHolder(ReadWorkbook readWorkbook) { getGlobalConfiguration().setUse1904windowing(Boolean.FALSE); } ignoreRecord = Boolean.FALSE; - } - - public POIFSFileSystem getPoifsFileSystem() { - return poifsFileSystem; - } - - public void setPoifsFileSystem(POIFSFileSystem poifsFileSystem) { - this.poifsFileSystem = poifsFileSystem; - } - - public FormatTrackingHSSFListener getFormatTrackingHSSFListener() { - return formatTrackingHSSFListener; - } - - public void setFormatTrackingHSSFListener(FormatTrackingHSSFListener formatTrackingHSSFListener) { - this.formatTrackingHSSFListener = formatTrackingHSSFListener; - } - - public HSSFWorkbook getHssfWorkbook() { - return hssfWorkbook; - } - - public void setHssfWorkbook(HSSFWorkbook hssfWorkbook) { - this.hssfWorkbook = hssfWorkbook; - } - - public List getBoundSheetRecordList() { - return boundSheetRecordList; - } - - public void setBoundSheetRecordList(List boundSheetRecordList) { - this.boundSheetRecordList = boundSheetRecordList; - } - - public Boolean getNeedReadSheet() { - return needReadSheet; - } - - public void setNeedReadSheet(Boolean needReadSheet) { - this.needReadSheet = needReadSheet; - } - - public Integer getReadSheetIndex() { - return readSheetIndex; - } - - public void setReadSheetIndex(Integer readSheetIndex) { - this.readSheetIndex = readSheetIndex; - } - - public Boolean getIgnoreRecord() { - return ignoreRecord; - } - - public void setIgnoreRecord(Boolean ignoreRecord) { - this.ignoreRecord = ignoreRecord; + currentSheetStopped = Boolean.TRUE; } }