Commit a661d13ed602ee94718c7f316c5b549352bc9367
1 parent
6e8fabfa
Exists in
master
xls 默认不读取隐藏行
Showing
5 changed files
with
35 additions
and
14 deletions
Show diff stats
bin/.gitignore
src/main/java/com/taover/easyexcel/analysis/v03/XlsSaxAnalyser.java
1 | 1 | package com.taover.easyexcel.analysis.v03; |
2 | 2 | |
3 | 3 | import java.io.IOException; |
4 | +import java.util.ArrayList; | |
4 | 5 | import java.util.HashMap; |
5 | 6 | import java.util.List; |
6 | 7 | import java.util.Map; |
... | ... | @@ -11,11 +12,11 @@ import org.apache.poi.hssf.eventusermodel.HSSFEventFactory; |
11 | 12 | import org.apache.poi.hssf.eventusermodel.HSSFListener; |
12 | 13 | import org.apache.poi.hssf.eventusermodel.HSSFRequest; |
13 | 14 | import org.apache.poi.hssf.eventusermodel.MissingRecordAwareHSSFListener; |
14 | -import org.apache.poi.hssf.eventusermodel.dummyrecord.LastCellOfRowDummyRecord; | |
15 | 15 | import org.apache.poi.hssf.record.BOFRecord; |
16 | 16 | import org.apache.poi.hssf.record.BlankRecord; |
17 | 17 | import org.apache.poi.hssf.record.BoolErrRecord; |
18 | 18 | import org.apache.poi.hssf.record.BoundSheetRecord; |
19 | +import org.apache.poi.hssf.record.CellRecord; | |
19 | 20 | import org.apache.poi.hssf.record.EOFRecord; |
20 | 21 | import org.apache.poi.hssf.record.FormulaRecord; |
21 | 22 | import org.apache.poi.hssf.record.HyperlinkRecord; |
... | ... | @@ -28,6 +29,7 @@ import org.apache.poi.hssf.record.NumberRecord; |
28 | 29 | import org.apache.poi.hssf.record.ObjRecord; |
29 | 30 | import org.apache.poi.hssf.record.RKRecord; |
30 | 31 | import org.apache.poi.hssf.record.Record; |
32 | +import org.apache.poi.hssf.record.RowRecord; | |
31 | 33 | import org.apache.poi.hssf.record.SSTRecord; |
32 | 34 | import org.apache.poi.hssf.record.StringRecord; |
33 | 35 | import org.apache.poi.hssf.record.TextObjectRecord; |
... | ... | @@ -80,7 +82,8 @@ public class XlsSaxAnalyser implements HSSFListener, ExcelReadExecutor { |
80 | 82 | private static final short DUMMY_RECORD_SID = -1; |
81 | 83 | private XlsReadContext xlsReadContext; |
82 | 84 | private static final Map<Short, XlsRecordHandler> XLS_RECORD_HANDLER_MAP = new HashMap<Short, XlsRecordHandler>(32); |
83 | - | |
85 | + List<Integer> skipCellRowIndexList = new ArrayList<Integer>(); | |
86 | + | |
84 | 87 | static { |
85 | 88 | XLS_RECORD_HANDLER_MAP.put(BlankRecord.sid, new BlankRecordHandler()); |
86 | 89 | XLS_RECORD_HANDLER_MAP.put(BOFRecord.sid, new BofRecordHandler()); |
... | ... | @@ -142,7 +145,10 @@ public class XlsSaxAnalyser implements HSSFListener, ExcelReadExecutor { |
142 | 145 | |
143 | 146 | @Override |
144 | 147 | public void processRecord(Record record) { |
145 | - XlsRecordHandler handler = XLS_RECORD_HANDLER_MAP.get(record.getSid()); | |
148 | + if(this.needSkip(xlsReadContext, record)) { | |
149 | + return; | |
150 | + } | |
151 | + XlsRecordHandler handler = XLS_RECORD_HANDLER_MAP.get(record.getSid()); | |
146 | 152 | if (handler == null) { |
147 | 153 | return; |
148 | 154 | } |
... | ... | @@ -151,11 +157,27 @@ public class XlsSaxAnalyser implements HSSFListener, ExcelReadExecutor { |
151 | 157 | if (ignoreRecord) { |
152 | 158 | // No need to read the current sheet |
153 | 159 | return; |
154 | - } | |
160 | + } | |
155 | 161 | if (!handler.support(xlsReadContext, record)) { |
156 | 162 | return; |
157 | 163 | } |
158 | 164 | handler.processRecord(xlsReadContext, record); |
159 | 165 | } |
160 | 166 | |
167 | + public boolean needSkip(XlsReadContext xlsReadContext, Record record) { | |
168 | + if(record.getSid() == RowRecord.sid) { | |
169 | + RowRecord rowRec = (RowRecord) record; | |
170 | + if(!xlsReadContext.xlsReadWorkbookHolder().getReadHiddenRow() | |
171 | + && rowRec.getZeroHeight()) { | |
172 | + skipCellRowIndexList.add(rowRec.getRowNumber()); | |
173 | + return true; | |
174 | + } | |
175 | + }else if(record instanceof CellRecord) { | |
176 | + CellRecord cellRec = (CellRecord)record; | |
177 | + if(skipCellRowIndexList.contains(cellRec.getRow())) { | |
178 | + return true; | |
179 | + } | |
180 | + } | |
181 | + return false; | |
182 | + } | |
161 | 183 | } | ... | ... |
src/main/java/com/taover/easyexcel/analysis/v03/handlers/AbstractXlsRecordHandler.java
... | ... | @@ -10,10 +10,9 @@ import com.taover.easyexcel.context.xls.XlsReadContext; |
10 | 10 | * |
11 | 11 | * @author Jiaju Zhuang |
12 | 12 | **/ |
13 | -public abstract class AbstractXlsRecordHandler implements XlsRecordHandler { | |
14 | - | |
13 | +public abstract class AbstractXlsRecordHandler implements XlsRecordHandler { | |
15 | 14 | @Override |
16 | 15 | public boolean support(XlsReadContext xlsReadContext, Record record) { |
17 | 16 | return true; |
18 | - } | |
17 | + } | |
19 | 18 | } | ... | ... |
src/test/java/com/taover/easyexcel/test/demo/read/ReadTest.java
... | ... | @@ -244,7 +244,7 @@ public class ReadTest { |
244 | 244 | */ |
245 | 245 | @Test |
246 | 246 | public void synchronousRead() { |
247 | - String fileName = TestFileUtil.getPath() + "demo" + File.separator + "demo.xlsx"; | |
247 | + String fileName = TestFileUtil.getPath() + "demo" + File.separator + "demo.xls"; | |
248 | 248 | // 这里 需要指定读用哪个class去读,然后读取第一个sheet 同步读取会自动finish |
249 | 249 | List<DemoData> list = EasyExcel.read(fileName).head(DemoData.class).sheet().doReadSync(); |
250 | 250 | for (DemoData data : list) { |
... | ... | @@ -252,11 +252,11 @@ public class ReadTest { |
252 | 252 | } |
253 | 253 | |
254 | 254 | // 这里 也可以不指定class,返回一个list,然后读取第一个sheet 同步读取会自动finish |
255 | - List<Map<Integer, String>> listMap = EasyExcel.read(fileName).sheet().doReadSync(); | |
256 | - for (Map<Integer, String> data : listMap) { | |
257 | - // 返回每条数据的键值对 表示所在的列 和所在列的值 | |
258 | - LOGGER.info("读取到数据:{}", JSON.toJSONString(data)); | |
259 | - } | |
255 | +// List<Map<Integer, String>> listMap = EasyExcel.read(fileName).sheet().doReadSync(); | |
256 | +// for (Map<Integer, String> data : listMap) { | |
257 | +// // 返回每条数据的键值对 表示所在的列 和所在列的值 | |
258 | +// LOGGER.info("读取到数据:{}", JSON.toJSONString(data)); | |
259 | +// } | |
260 | 260 | } |
261 | 261 | |
262 | 262 | /** | ... | ... |
No preview for this file type