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 33 import org.apache.poi.hssf.record.SSTRecord;
34 34 import org.apache.poi.hssf.record.StringRecord;
35 35 import org.apache.poi.hssf.record.TextObjectRecord;
  36 +import org.apache.poi.hssf.record.WindowOneRecord;
36 37 import org.slf4j.Logger;
37 38 import org.slf4j.LoggerFactory;
38 39  
... ... @@ -83,6 +84,8 @@ public class XlsSaxAnalyser implements HSSFListener, ExcelReadExecutor {
83 84 private XlsReadContext xlsReadContext;
84 85 private static final Map<Short, XlsRecordHandler> XLS_RECORD_HANDLER_MAP = new HashMap<Short, XlsRecordHandler>(32);
85 86 List<Integer> skipCellRowIndexList = new ArrayList<Integer>();
  87 + private Integer activeSheetIndex = null;
  88 + private int currSheetIndex = -1;
86 89  
87 90 static {
88 91 XLS_RECORD_HANDLER_MAP.put(BlankRecord.sid, new BlankRecordHandler());
... ... @@ -145,9 +148,14 @@ public class XlsSaxAnalyser implements HSSFListener, ExcelReadExecutor {
145 148  
146 149 @Override
147 150 public void processRecord(Record record) {
  151 + //flush global data
  152 + this.initGlobalXlsData(xlsReadContext, record);
  153 +
  154 + //check whether skip
148 155 if(this.needSkip(xlsReadContext, record)) {
149 156 return;
150   - }
  157 + }
  158 +
151 159 XlsRecordHandler handler = XLS_RECORD_HANDLER_MAP.get(record.getSid());
152 160 if (handler == null) {
153 161 return;
... ... @@ -164,20 +172,39 @@ public class XlsSaxAnalyser implements HSSFListener, ExcelReadExecutor {
164 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 185 public boolean needSkip(XlsReadContext xlsReadContext, Record record) {
168 186 if(record.getSid() == RowRecord.sid) {
169 187 RowRecord rowRec = (RowRecord) record;
170   - if(!xlsReadContext.xlsReadWorkbookHolder().getReadHiddenRow()
  188 + Boolean readHiddenRow = xlsReadContext.xlsReadWorkbookHolder().getReadHiddenRow();
  189 + if(readHiddenRow != null
  190 + && !readHiddenRow
171 191 && rowRec.getZeroHeight()) {
172 192 skipCellRowIndexList.add(rowRec.getRowNumber());
173 193 return true;
174 194 }
175 195 }else if(record instanceof CellRecord) {
176 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 202 return true;
179   - }
  203 + }else if(skipCellRowIndexList.contains(cellRec.getRow())) {
  204 + return true;
  205 + }
180 206 }
  207 +
181 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 253 // }
254 254  
255 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 257 for (Map<Integer, String> data : listMap) {
258 258 // 返回每条数据的键值对 表示所在的列 和所在列的值
259 259 LOGGER.info("读取到数据:{}", JSON.toJSONString(data));
... ...