Commit b769b0dc0d57420d676c685914dd9dcfaabff84e

Authored by unknown
1 parent 4e984701
Exists in master

1.fix a bug about hidden line 2.default read active sheet

src/main/java/com/taover/easyexcel/analysis/v03/XlsSaxAnalyser.java
@@ -33,6 +33,7 @@ import org.apache.poi.hssf.record.RowRecord; @@ -33,6 +33,7 @@ import org.apache.poi.hssf.record.RowRecord;
33 import org.apache.poi.hssf.record.SSTRecord; 33 import org.apache.poi.hssf.record.SSTRecord;
34 import org.apache.poi.hssf.record.StringRecord; 34 import org.apache.poi.hssf.record.StringRecord;
35 import org.apache.poi.hssf.record.TextObjectRecord; 35 import org.apache.poi.hssf.record.TextObjectRecord;
  36 +import org.apache.poi.hssf.record.WindowOneRecord;
36 import org.slf4j.Logger; 37 import org.slf4j.Logger;
37 import org.slf4j.LoggerFactory; 38 import org.slf4j.LoggerFactory;
38 39
@@ -83,6 +84,8 @@ public class XlsSaxAnalyser implements HSSFListener, ExcelReadExecutor { @@ -83,6 +84,8 @@ public class XlsSaxAnalyser implements HSSFListener, ExcelReadExecutor {
83 private XlsReadContext xlsReadContext; 84 private XlsReadContext xlsReadContext;
84 private static final Map<Short, XlsRecordHandler> XLS_RECORD_HANDLER_MAP = new HashMap<Short, XlsRecordHandler>(32); 85 private static final Map<Short, XlsRecordHandler> XLS_RECORD_HANDLER_MAP = new HashMap<Short, XlsRecordHandler>(32);
85 List<Integer> skipCellRowIndexList = new ArrayList<Integer>(); 86 List<Integer> skipCellRowIndexList = new ArrayList<Integer>();
  87 + private Integer activeSheetIndex = null;
  88 + private int currSheetIndex = -1;
86 89
87 static { 90 static {
88 XLS_RECORD_HANDLER_MAP.put(BlankRecord.sid, new BlankRecordHandler()); 91 XLS_RECORD_HANDLER_MAP.put(BlankRecord.sid, new BlankRecordHandler());
@@ -145,9 +148,14 @@ public class XlsSaxAnalyser implements HSSFListener, ExcelReadExecutor { @@ -145,9 +148,14 @@ public class XlsSaxAnalyser implements HSSFListener, ExcelReadExecutor {
145 148
146 @Override 149 @Override
147 public void processRecord(Record record) { 150 public void processRecord(Record record) {
  151 + //flush global data
  152 + this.initGlobalXlsData(xlsReadContext, record);
  153 +
  154 + //check whether skip
148 if(this.needSkip(xlsReadContext, record)) { 155 if(this.needSkip(xlsReadContext, record)) {
149 return; 156 return;
150 - } 157 + }
  158 +
151 XlsRecordHandler handler = XLS_RECORD_HANDLER_MAP.get(record.getSid()); 159 XlsRecordHandler handler = XLS_RECORD_HANDLER_MAP.get(record.getSid());
152 if (handler == null) { 160 if (handler == null) {
153 return; 161 return;
@@ -164,20 +172,39 @@ public class XlsSaxAnalyser implements HSSFListener, ExcelReadExecutor { @@ -164,20 +172,39 @@ public class XlsSaxAnalyser implements HSSFListener, ExcelReadExecutor {
164 handler.processRecord(xlsReadContext, record); 172 handler.processRecord(xlsReadContext, record);
165 } 173 }
166 174
  175 + private void initGlobalXlsData(XlsReadContext xlsReadContext2, Record record) {
  176 + if(record.getSid() == EOFRecord.sid) {
  177 + this.skipCellRowIndexList.clear();
  178 + ++this.currSheetIndex;
  179 + } else if(record.getSid() == WindowOneRecord.sid) {
  180 + WindowOneRecord window = (WindowOneRecord)record;
  181 + this.activeSheetIndex = window.getActiveSheetIndex();
  182 + }
  183 + }
  184 +
167 public boolean needSkip(XlsReadContext xlsReadContext, Record record) { 185 public boolean needSkip(XlsReadContext xlsReadContext, Record record) {
168 if(record.getSid() == RowRecord.sid) { 186 if(record.getSid() == RowRecord.sid) {
169 RowRecord rowRec = (RowRecord) record; 187 RowRecord rowRec = (RowRecord) record;
170 - if(!xlsReadContext.xlsReadWorkbookHolder().getReadHiddenRow() 188 + Boolean readHiddenRow = xlsReadContext.xlsReadWorkbookHolder().getReadHiddenRow();
  189 + if(readHiddenRow != null
  190 + && !readHiddenRow
171 && rowRec.getZeroHeight()) { 191 && rowRec.getZeroHeight()) {
172 skipCellRowIndexList.add(rowRec.getRowNumber()); 192 skipCellRowIndexList.add(rowRec.getRowNumber());
173 return true; 193 return true;
174 } 194 }
175 }else if(record instanceof CellRecord) { 195 }else if(record instanceof CellRecord) {
176 CellRecord cellRec = (CellRecord)record; 196 CellRecord cellRec = (CellRecord)record;
177 - if(skipCellRowIndexList.contains(cellRec.getRow())) { 197 + Boolean justReadActiveSheet = xlsReadContext.xlsReadWorkbookHolder().getReadJustSelected();
  198 + if(justReadActiveSheet != null
  199 + && justReadActiveSheet
  200 + && this.activeSheetIndex != null
  201 + && this.currSheetIndex != this.activeSheetIndex) {
178 return true; 202 return true;
179 - } 203 + }else if(skipCellRowIndexList.contains(cellRec.getRow())) {
  204 + return true;
  205 + }
180 } 206 }
  207 +
181 return false; 208 return false;
182 } 209 }
183 } 210 }
src/test/java/com/taover/easyexcel/test/demo/read/ReadTest.java
@@ -253,7 +253,7 @@ public class ReadTest { @@ -253,7 +253,7 @@ public class ReadTest {
253 // } 253 // }
254 254
255 // 这里 也可以不指定class,返回一个list,然后读取第一个sheet 同步读取会自动finish 255 // 这里 也可以不指定class,返回一个list,然后读取第一个sheet 同步读取会自动finish
256 - List<Map<Integer, String>> listMap = EasyExcel.read("D://demo.xlsx").headRowNumber(0).sheet(true).doReadSync(); 256 + List<Map<Integer, String>> listMap = EasyExcel.read("D://demo.xls").headRowNumber(0).readHiddenRow(false).sheet(true).doReadSync();
257 for (Map<Integer, String> data : listMap) { 257 for (Map<Integer, String> data : listMap) {
258 // 返回每条数据的键值对 表示所在的列 和所在列的值 258 // 返回每条数据的键值对 表示所在的列 和所在列的值
259 LOGGER.info("读取到数据:{}", JSON.toJSONString(data)); 259 LOGGER.info("读取到数据:{}", JSON.toJSONString(data));