diff --git a/bin/.gitignore b/bin/.gitignore index 4a4d9a1..c118906 100644 --- a/bin/.gitignore +++ b/bin/.gitignore @@ -1,3 +1,4 @@ +/com/ /converter/ /dataformat/ /demo/ @@ -8,4 +9,3 @@ /multiplesheets/ /simple/ /template/ -/com/ 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 bc5bb13..b238055 100644 --- a/src/main/java/com/taover/easyexcel/analysis/v03/XlsSaxAnalyser.java +++ b/src/main/java/com/taover/easyexcel/analysis/v03/XlsSaxAnalyser.java @@ -1,6 +1,7 @@ package com.taover.easyexcel.analysis.v03; import java.io.IOException; +import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -11,11 +12,11 @@ import org.apache.poi.hssf.eventusermodel.HSSFEventFactory; import org.apache.poi.hssf.eventusermodel.HSSFListener; import org.apache.poi.hssf.eventusermodel.HSSFRequest; import org.apache.poi.hssf.eventusermodel.MissingRecordAwareHSSFListener; -import org.apache.poi.hssf.eventusermodel.dummyrecord.LastCellOfRowDummyRecord; 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.CellRecord; import org.apache.poi.hssf.record.EOFRecord; import org.apache.poi.hssf.record.FormulaRecord; import org.apache.poi.hssf.record.HyperlinkRecord; @@ -28,6 +29,7 @@ import org.apache.poi.hssf.record.NumberRecord; import org.apache.poi.hssf.record.ObjRecord; import org.apache.poi.hssf.record.RKRecord; import org.apache.poi.hssf.record.Record; +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; @@ -80,7 +82,8 @@ public class XlsSaxAnalyser implements HSSFListener, ExcelReadExecutor { private static final short DUMMY_RECORD_SID = -1; private XlsReadContext xlsReadContext; private static final Map XLS_RECORD_HANDLER_MAP = new HashMap(32); - + List skipCellRowIndexList = new ArrayList(); + static { XLS_RECORD_HANDLER_MAP.put(BlankRecord.sid, new BlankRecordHandler()); XLS_RECORD_HANDLER_MAP.put(BOFRecord.sid, new BofRecordHandler()); @@ -142,7 +145,10 @@ public class XlsSaxAnalyser implements HSSFListener, ExcelReadExecutor { @Override public void processRecord(Record record) { - XlsRecordHandler handler = XLS_RECORD_HANDLER_MAP.get(record.getSid()); + if(this.needSkip(xlsReadContext, record)) { + return; + } + XlsRecordHandler handler = XLS_RECORD_HANDLER_MAP.get(record.getSid()); if (handler == null) { return; } @@ -151,11 +157,27 @@ public class XlsSaxAnalyser implements HSSFListener, ExcelReadExecutor { if (ignoreRecord) { // No need to read the current sheet return; - } + } if (!handler.support(xlsReadContext, record)) { return; } handler.processRecord(xlsReadContext, record); } + public boolean needSkip(XlsReadContext xlsReadContext, Record record) { + if(record.getSid() == RowRecord.sid) { + RowRecord rowRec = (RowRecord) record; + if(!xlsReadContext.xlsReadWorkbookHolder().getReadHiddenRow() + && rowRec.getZeroHeight()) { + skipCellRowIndexList.add(rowRec.getRowNumber()); + return true; + } + }else if(record instanceof CellRecord) { + CellRecord cellRec = (CellRecord)record; + if(skipCellRowIndexList.contains(cellRec.getRow())) { + return true; + } + } + return false; + } } diff --git a/src/main/java/com/taover/easyexcel/analysis/v03/handlers/AbstractXlsRecordHandler.java b/src/main/java/com/taover/easyexcel/analysis/v03/handlers/AbstractXlsRecordHandler.java index 965a8be..c4bd07e 100644 --- a/src/main/java/com/taover/easyexcel/analysis/v03/handlers/AbstractXlsRecordHandler.java +++ b/src/main/java/com/taover/easyexcel/analysis/v03/handlers/AbstractXlsRecordHandler.java @@ -10,10 +10,9 @@ import com.taover.easyexcel.context.xls.XlsReadContext; * * @author Jiaju Zhuang **/ -public abstract class AbstractXlsRecordHandler implements XlsRecordHandler { - +public abstract class AbstractXlsRecordHandler implements XlsRecordHandler { @Override public boolean support(XlsReadContext xlsReadContext, Record record) { return true; - } + } } 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 f60b6b9..43ddd56 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 @@ -244,7 +244,7 @@ public class ReadTest { */ @Test public void synchronousRead() { - String fileName = TestFileUtil.getPath() + "demo" + File.separator + "demo.xlsx"; + String fileName = TestFileUtil.getPath() + "demo" + File.separator + "demo.xls"; // 这里 需要指定读用哪个class去读,然后读取第一个sheet 同步读取会自动finish List list = EasyExcel.read(fileName).head(DemoData.class).sheet().doReadSync(); for (DemoData data : list) { @@ -252,11 +252,11 @@ public class ReadTest { } // 这里 也可以不指定class,返回一个list,然后读取第一个sheet 同步读取会自动finish - List> listMap = EasyExcel.read(fileName).sheet().doReadSync(); - for (Map data : listMap) { - // 返回每条数据的键值对 表示所在的列 和所在列的值 - LOGGER.info("读取到数据:{}", JSON.toJSONString(data)); - } +// List> listMap = EasyExcel.read(fileName).sheet().doReadSync(); +// for (Map data : listMap) { +// // 返回每条数据的键值对 表示所在的列 和所在列的值 +// LOGGER.info("读取到数据:{}", JSON.toJSONString(data)); +// } } /** diff --git a/src/test/resources/demo/demo.xls b/src/test/resources/demo/demo.xls new file mode 100644 index 0000000..98a01bd Binary files /dev/null and b/src/test/resources/demo/demo.xls differ -- libgit2 0.21.2