From d59288ac19cea6284cc8ca37792f8e372d8f1b3c Mon Sep 17 00:00:00 2001 From: ludengke Date: Fri, 14 Aug 2020 09:16:50 +0800 Subject: [PATCH] =?UTF-8?q?RowHandler=E5=A2=9E=E5=8A=A0=E4=B8=80=E4=B8=AAs?= =?UTF-8?q?heet=E9=A1=B5=E5=A4=84=E7=90=86=E5=AE=8C=E6=88=90=E7=9A=84?= =?UTF-8?q?=E5=9B=9E=E8=B0=83=E5=87=BD=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../poi/excel/sax/Excel03SaxReader.java | 22 +++++++++---------- .../poi/excel/sax/Excel07SaxReader.java | 2 ++ .../poi/excel/sax/handler/RowHandler.java | 7 ++++++ 3 files changed, 19 insertions(+), 12 deletions(-) diff --git a/hutool-poi/src/main/java/cn/hutool/poi/excel/sax/Excel03SaxReader.java b/hutool-poi/src/main/java/cn/hutool/poi/excel/sax/Excel03SaxReader.java index 0a753e65c..84af8bb3d 100644 --- a/hutool-poi/src/main/java/cn/hutool/poi/excel/sax/Excel03SaxReader.java +++ b/hutool-poi/src/main/java/cn/hutool/poi/excel/sax/Excel03SaxReader.java @@ -14,18 +14,7 @@ import org.apache.poi.hssf.eventusermodel.MissingRecordAwareHSSFListener; import org.apache.poi.hssf.eventusermodel.dummyrecord.LastCellOfRowDummyRecord; import org.apache.poi.hssf.eventusermodel.dummyrecord.MissingCellDummyRecord; import org.apache.poi.hssf.model.HSSFFormulaParser; -import org.apache.poi.hssf.record.BOFRecord; -import org.apache.poi.hssf.record.BlankRecord; -import org.apache.poi.hssf.record.BoolErrRecord; -import org.apache.poi.hssf.record.BoundSheetRecord; -import org.apache.poi.hssf.record.CellValueRecordInterface; -import org.apache.poi.hssf.record.FormulaRecord; -import org.apache.poi.hssf.record.LabelRecord; -import org.apache.poi.hssf.record.LabelSSTRecord; -import org.apache.poi.hssf.record.NumberRecord; -import org.apache.poi.hssf.record.Record; -import org.apache.poi.hssf.record.SSTRecord; -import org.apache.poi.hssf.record.StringRecord; +import org.apache.poi.hssf.record.*; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.poifs.filesystem.POIFSFileSystem; @@ -190,6 +179,8 @@ public class Excel03SaxReader extends AbstractExcelSaxReader i } curRid++; } + } else if (record instanceof EOFRecord){ + processLastCellSheet(); } else if (isProcessCurrentSheet()) { if (record instanceof MissingCellDummyRecord) { // 空值的操作 @@ -339,6 +330,13 @@ public class Excel03SaxReader extends AbstractExcelSaxReader i this.rowCellList = new ArrayList<>(this.rowCellList.size()); } + /** + * 处理sheet结束后的操作 + */ + private void processLastCellSheet(){ + this.rowHandler.doAfterAllAnalysed(); + } + /** * 是否处理当前sheet * diff --git a/hutool-poi/src/main/java/cn/hutool/poi/excel/sax/Excel07SaxReader.java b/hutool-poi/src/main/java/cn/hutool/poi/excel/sax/Excel07SaxReader.java index 8557a08ac..0ff2aae60 100644 --- a/hutool-poi/src/main/java/cn/hutool/poi/excel/sax/Excel07SaxReader.java +++ b/hutool-poi/src/main/java/cn/hutool/poi/excel/sax/Excel07SaxReader.java @@ -137,6 +137,7 @@ public class Excel07SaxReader extends AbstractExcelSaxReader i // 根据 rId# 或 rSheet# 查找sheet sheetInputStream = xssfReader.getSheet(RID_PREFIX + (rid + 1)); ExcelSaxUtil.readFrom(sheetInputStream, this); + rowHandler.doAfterAllAnalysed(); } else { this.sheetIndex = -1; // 遍历所有sheet @@ -147,6 +148,7 @@ public class Excel07SaxReader extends AbstractExcelSaxReader i this.sheetIndex++; sheetInputStream = sheetInputStreams.next(); ExcelSaxUtil.readFrom(sheetInputStream, this); + rowHandler.doAfterAllAnalysed(); } } } catch (RuntimeException e) { diff --git a/hutool-poi/src/main/java/cn/hutool/poi/excel/sax/handler/RowHandler.java b/hutool-poi/src/main/java/cn/hutool/poi/excel/sax/handler/RowHandler.java index aff168c36..95e035172 100644 --- a/hutool-poi/src/main/java/cn/hutool/poi/excel/sax/handler/RowHandler.java +++ b/hutool-poi/src/main/java/cn/hutool/poi/excel/sax/handler/RowHandler.java @@ -31,4 +31,11 @@ public interface RowHandler { * @param rowList 行数据列表 */ void handle(int sheetIndex, long rowIndex, List rowList); + + /** + * 处理一个sheet页完成的操作 + */ + default void doAfterAllAnalysed(){ + //pass + } }