Skip to content

Commit

Permalink
* 支持停止单个sheet以后继续读取其他sheet,使用ExcelAnalysisStopSheetException
Browse files Browse the repository at this point in the history
  • Loading branch information
是仪 committed Mar 11, 2024
1 parent abcd4f7 commit 5d02c43
Show file tree
Hide file tree
Showing 4 changed files with 27 additions and 58 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -171,6 +171,7 @@ public void processRecord(Record record) {
log.debug("Custom stop!", e);
}
xlsReadContext.xlsReadWorkbookHolder().setIgnoreRecord(Boolean.TRUE);
xlsReadContext.xlsReadWorkbookHolder().setCurrentSheetStopped(Boolean.TRUE);
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -17,6 +21,10 @@
*
* @author Jiaju Zhuang
*/
@Getter
@Setter
@EqualsAndHashCode
@NoArgsConstructor
public class XlsReadWorkbookHolder extends ReadWorkbookHolder {
/**
* File System
Expand Down Expand Up @@ -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<BoundSheetRecord>();
Expand All @@ -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<BoundSheetRecord> getBoundSheetRecordList() {
return boundSheetRecordList;
}

public void setBoundSheetRecordList(List<BoundSheetRecord> 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;
}
}

0 comments on commit 5d02c43

Please sign in to comment.