From b769b0dc0d57420d676c685914dd9dcfaabff84e Mon Sep 17 00:00:00 2001 From: unknown Date: Tue, 4 Aug 2020 18:28:32 +0800 Subject: [PATCH] 1.fix a bug about hidden line 2.default read active sheet --- src/main/java/com/taover/easyexcel/analysis/v03/XlsSaxAnalyser.java | 35 +++++++++++++++++++++++++++++++---- src/test/java/com/taover/easyexcel/test/demo/read/ReadTest.java | 2 +- 2 files changed, 32 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/taover/easyexcel/analysis/v03/XlsSaxAnalyser.java b/src/main/java/com/taover/easyexcel/analysis/v03/XlsSaxAnalyser.java index b238055..ae5541c 100644 --- a/src/main/java/com/taover/easyexcel/analysis/v03/XlsSaxAnalyser.java +++ b/src/main/java/com/taover/easyexcel/analysis/v03/XlsSaxAnalyser.java @@ -33,6 +33,7 @@ import org.apache.poi.hssf.record.RowRecord; import org.apache.poi.hssf.record.SSTRecord; import org.apache.poi.hssf.record.StringRecord; import org.apache.poi.hssf.record.TextObjectRecord; +import org.apache.poi.hssf.record.WindowOneRecord; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -83,6 +84,8 @@ public class XlsSaxAnalyser implements HSSFListener, ExcelReadExecutor { private XlsReadContext xlsReadContext; private static final Map XLS_RECORD_HANDLER_MAP = new HashMap(32); List skipCellRowIndexList = new ArrayList(); + private Integer activeSheetIndex = null; + private int currSheetIndex = -1; static { XLS_RECORD_HANDLER_MAP.put(BlankRecord.sid, new BlankRecordHandler()); @@ -145,9 +148,14 @@ public class XlsSaxAnalyser implements HSSFListener, ExcelReadExecutor { @Override public void processRecord(Record record) { + //flush global data + this.initGlobalXlsData(xlsReadContext, record); + + //check whether skip if(this.needSkip(xlsReadContext, record)) { return; - } + } + XlsRecordHandler handler = XLS_RECORD_HANDLER_MAP.get(record.getSid()); if (handler == null) { return; @@ -164,20 +172,39 @@ public class XlsSaxAnalyser implements HSSFListener, ExcelReadExecutor { handler.processRecord(xlsReadContext, record); } + private void initGlobalXlsData(XlsReadContext xlsReadContext2, Record record) { + if(record.getSid() == EOFRecord.sid) { + this.skipCellRowIndexList.clear(); + ++this.currSheetIndex; + } else if(record.getSid() == WindowOneRecord.sid) { + WindowOneRecord window = (WindowOneRecord)record; + this.activeSheetIndex = window.getActiveSheetIndex(); + } + } + public boolean needSkip(XlsReadContext xlsReadContext, Record record) { if(record.getSid() == RowRecord.sid) { RowRecord rowRec = (RowRecord) record; - if(!xlsReadContext.xlsReadWorkbookHolder().getReadHiddenRow() + Boolean readHiddenRow = xlsReadContext.xlsReadWorkbookHolder().getReadHiddenRow(); + if(readHiddenRow != null + && !readHiddenRow && rowRec.getZeroHeight()) { skipCellRowIndexList.add(rowRec.getRowNumber()); return true; } }else if(record instanceof CellRecord) { CellRecord cellRec = (CellRecord)record; - if(skipCellRowIndexList.contains(cellRec.getRow())) { + Boolean justReadActiveSheet = xlsReadContext.xlsReadWorkbookHolder().getReadJustSelected(); + if(justReadActiveSheet != null + && justReadActiveSheet + && this.activeSheetIndex != null + && this.currSheetIndex != this.activeSheetIndex) { return true; - } + }else if(skipCellRowIndexList.contains(cellRec.getRow())) { + return true; + } } + return false; } } diff --git a/src/test/java/com/taover/easyexcel/test/demo/read/ReadTest.java b/src/test/java/com/taover/easyexcel/test/demo/read/ReadTest.java index df0794e..0af19d4 100644 --- a/src/test/java/com/taover/easyexcel/test/demo/read/ReadTest.java +++ b/src/test/java/com/taover/easyexcel/test/demo/read/ReadTest.java @@ -253,7 +253,7 @@ public class ReadTest { // } // 这里 也可以不指定class,返回一个list,然后读取第一个sheet 同步读取会自动finish - List> listMap = EasyExcel.read("D://demo.xlsx").headRowNumber(0).sheet(true).doReadSync(); + List> listMap = EasyExcel.read("D://demo.xls").headRowNumber(0).readHiddenRow(false).sheet(true).doReadSync(); for (Map data : listMap) { // 返回每条数据的键值对 表示所在的列 和所在列的值 LOGGER.info("读取到数据:{}", JSON.toJSONString(data)); -- libgit2 0.21.2