Browse Source

RowHandler增加一个sheet页处理完成的回调函数

ludengke 5 years ago
parent
commit
d59288ac19

+ 10 - 12
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<Excel03SaxReader> i
 				}
 				curRid++;
 			}
+		} else if (record instanceof EOFRecord){
+			processLastCellSheet();
 		} else if (isProcessCurrentSheet()) {
 			if (record instanceof MissingCellDummyRecord) {
 				// 空值的操作
@@ -340,6 +331,13 @@ public class Excel03SaxReader extends AbstractExcelSaxReader<Excel03SaxReader> i
 	}
 
 	/**
+	 * 处理sheet结束后的操作
+	 */
+	private void processLastCellSheet(){
+		this.rowHandler.doAfterAllAnalysed();
+	}
+
+	/**
 	 * 是否处理当前sheet
 	 *
 	 * @return 是否处理当前sheet

+ 2 - 0
hutool-poi/src/main/java/cn/hutool/poi/excel/sax/Excel07SaxReader.java

@@ -137,6 +137,7 @@ public class Excel07SaxReader extends AbstractExcelSaxReader<Excel07SaxReader> 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<Excel07SaxReader> i
 					this.sheetIndex++;
 					sheetInputStream = sheetInputStreams.next();
 					ExcelSaxUtil.readFrom(sheetInputStream, this);
+					rowHandler.doAfterAllAnalysed();
 				}
 			}
 		} catch (RuntimeException e) {

+ 7 - 0
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<Object> rowList);
+
+	/**
+	 * 处理一个sheet页完成的操作
+	 */
+	default void doAfterAllAnalysed(){
+		//pass
+	}
 }