Commit 6ed4189bf079b6ab2787c2ca1efbfd030a21c753
1 parent
c14fb4cc
Exists in
master
support hidden sheet
Showing
12 changed files
with
200 additions
and
92 deletions
Show diff stats
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; | |
5 | 4 | import java.util.HashMap; |
6 | 5 | import java.util.List; |
7 | 6 | import java.util.Map; |
... | ... | @@ -54,9 +53,11 @@ import com.taover.easyexcel.analysis.v03.handlers.NoteRecordHandler; |
54 | 53 | import com.taover.easyexcel.analysis.v03.handlers.NumberRecordHandler; |
55 | 54 | import com.taover.easyexcel.analysis.v03.handlers.ObjRecordHandler; |
56 | 55 | import com.taover.easyexcel.analysis.v03.handlers.RkRecordHandler; |
56 | +import com.taover.easyexcel.analysis.v03.handlers.RowRecordHandler; | |
57 | 57 | import com.taover.easyexcel.analysis.v03.handlers.SstRecordHandler; |
58 | 58 | import com.taover.easyexcel.analysis.v03.handlers.StringRecordHandler; |
59 | 59 | import com.taover.easyexcel.analysis.v03.handlers.TextObjectRecordHandler; |
60 | +import com.taover.easyexcel.analysis.v03.handlers.WindowOneRecordHandler; | |
60 | 61 | import com.taover.easyexcel.context.xls.XlsReadContext; |
61 | 62 | import com.taover.easyexcel.exception.ExcelAnalysisException; |
62 | 63 | import com.taover.easyexcel.exception.ExcelAnalysisStopException; |
... | ... | @@ -83,9 +84,6 @@ public class XlsSaxAnalyser implements HSSFListener, ExcelReadExecutor { |
83 | 84 | private static final short DUMMY_RECORD_SID = -1; |
84 | 85 | private XlsReadContext xlsReadContext; |
85 | 86 | private static final Map<Short, XlsRecordHandler> XLS_RECORD_HANDLER_MAP = new HashMap<Short, XlsRecordHandler>(32); |
86 | - List<Integer> skipCellRowIndexList = new ArrayList<Integer>(); | |
87 | - private Integer activeSheetIndex = null; | |
88 | - private int currSheetIndex = -1; | |
89 | 87 | |
90 | 88 | static { |
91 | 89 | XLS_RECORD_HANDLER_MAP.put(BlankRecord.sid, new BlankRecordHandler()); |
... | ... | @@ -107,6 +105,8 @@ public class XlsSaxAnalyser implements HSSFListener, ExcelReadExecutor { |
107 | 105 | XLS_RECORD_HANDLER_MAP.put(SSTRecord.sid, new SstRecordHandler()); |
108 | 106 | XLS_RECORD_HANDLER_MAP.put(StringRecord.sid, new StringRecordHandler()); |
109 | 107 | XLS_RECORD_HANDLER_MAP.put(TextObjectRecord.sid, new TextObjectRecordHandler()); |
108 | + XLS_RECORD_HANDLER_MAP.put(WindowOneRecord.sid, new WindowOneRecordHandler()); | |
109 | + XLS_RECORD_HANDLER_MAP.put(RowRecord.sid, new RowRecordHandler()); | |
110 | 110 | } |
111 | 111 | |
112 | 112 | public XlsSaxAnalyser(XlsReadContext xlsReadContext) { |
... | ... | @@ -139,6 +139,7 @@ public class XlsSaxAnalyser implements HSSFListener, ExcelReadExecutor { |
139 | 139 | HSSFEventFactory factory = new HSSFEventFactory(); |
140 | 140 | HSSFRequest request = new HSSFRequest(); |
141 | 141 | request.addListenerForAllRecords(xlsReadWorkbookHolder.getFormatTrackingHSSFListener()); |
142 | + | |
142 | 143 | try { |
143 | 144 | factory.processWorkbookEvents(request, xlsReadWorkbookHolder.getPoifsFileSystem()); |
144 | 145 | } catch (IOException e) { |
... | ... | @@ -148,22 +149,11 @@ public class XlsSaxAnalyser implements HSSFListener, ExcelReadExecutor { |
148 | 149 | |
149 | 150 | @Override |
150 | 151 | public void processRecord(Record record) { |
151 | - System.out.println(record); | |
152 | - | |
153 | - //flush global data | |
154 | - this.initGlobalXlsData(xlsReadContext, record); | |
155 | - | |
156 | - //check whether skip | |
157 | - if(this.needSkip(xlsReadContext, record)) { | |
158 | - return; | |
159 | - } | |
160 | - | |
161 | 152 | XlsRecordHandler handler = XLS_RECORD_HANDLER_MAP.get(record.getSid()); |
162 | 153 | if (handler == null) { |
163 | 154 | return; |
164 | 155 | } |
165 | - boolean ignoreRecord = (handler instanceof IgnorableXlsRecordHandler) | |
166 | - && xlsReadContext.xlsReadSheetHolder() != null && xlsReadContext.xlsReadWorkbookHolder().getIgnoreRecord(); | |
156 | + boolean ignoreRecord = (handler instanceof IgnorableXlsRecordHandler) && xlsReadContext.xlsReadWorkbookHolder().getIgnoreRecord(); | |
167 | 157 | if (ignoreRecord) { |
168 | 158 | // No need to read the current sheet |
169 | 159 | return; |
... | ... | @@ -173,40 +163,4 @@ public class XlsSaxAnalyser implements HSSFListener, ExcelReadExecutor { |
173 | 163 | } |
174 | 164 | handler.processRecord(xlsReadContext, record); |
175 | 165 | } |
176 | - | |
177 | - private void initGlobalXlsData(XlsReadContext xlsReadContext2, Record record) { | |
178 | - if(record.getSid() == EOFRecord.sid) { | |
179 | - this.skipCellRowIndexList.clear(); | |
180 | - ++this.currSheetIndex; | |
181 | - } else if(record.getSid() == WindowOneRecord.sid) { | |
182 | - WindowOneRecord window = (WindowOneRecord)record; | |
183 | - this.activeSheetIndex = window.getActiveSheetIndex(); | |
184 | - } | |
185 | - } | |
186 | - | |
187 | - private boolean needSkip(XlsReadContext xlsReadContext, Record record) { | |
188 | - if(record.getSid() == RowRecord.sid) { | |
189 | - RowRecord rowRec = (RowRecord) record; | |
190 | - Boolean readHiddenRow = xlsReadContext.xlsReadWorkbookHolder().getReadHiddenRow(); | |
191 | - if(readHiddenRow != null | |
192 | - && !readHiddenRow | |
193 | - && rowRec.getZeroHeight()) { | |
194 | - skipCellRowIndexList.add(rowRec.getRowNumber()); | |
195 | - return true; | |
196 | - } | |
197 | - }else if(record instanceof CellRecord) { | |
198 | - CellRecord cellRec = (CellRecord)record; | |
199 | - Boolean justReadActiveSheet = xlsReadContext.xlsReadWorkbookHolder().getReadJustSelected(); | |
200 | - if(justReadActiveSheet != null | |
201 | - && justReadActiveSheet | |
202 | - && this.activeSheetIndex != null | |
203 | - && this.currSheetIndex != this.activeSheetIndex) { | |
204 | - return true; | |
205 | - }else if(skipCellRowIndexList.contains(cellRec.getRow())) { | |
206 | - return true; | |
207 | - } | |
208 | - } | |
209 | - | |
210 | - return false; | |
211 | - } | |
212 | 166 | } | ... | ... |
src/main/java/com/taover/easyexcel/analysis/v03/handlers/AbstractXlsRecordHandler.java
1 | 1 | package com.taover.easyexcel.analysis.v03.handlers; |
2 | 2 | |
3 | +import org.apache.poi.hssf.record.CellRecord; | |
3 | 4 | import org.apache.poi.hssf.record.Record; |
4 | 5 | |
5 | 6 | import com.taover.easyexcel.analysis.v03.XlsRecordHandler; |
... | ... | @@ -13,6 +14,23 @@ import com.taover.easyexcel.context.xls.XlsReadContext; |
13 | 14 | public abstract class AbstractXlsRecordHandler implements XlsRecordHandler { |
14 | 15 | @Override |
15 | 16 | public boolean support(XlsReadContext xlsReadContext, Record record) { |
16 | - return true; | |
17 | + if(record instanceof CellRecord) { | |
18 | + Boolean readHiddenRow = xlsReadContext.xlsReadWorkbookHolder().getReadHiddenRow(); | |
19 | + Boolean justReadActiveSheet = xlsReadContext.xlsReadWorkbookHolder().getReadJustSelected(); | |
20 | + if(readHiddenRow == null) { | |
21 | + readHiddenRow = true; | |
22 | + } | |
23 | + if(justReadActiveSheet == null) { | |
24 | + justReadActiveSheet = false; | |
25 | + } | |
26 | + CellRecord cellRec = (CellRecord)record; | |
27 | + if(xlsReadContext.xlsReadSheetHolder() == null) { | |
28 | + return false; | |
29 | + } | |
30 | + if(!readHiddenRow && xlsReadContext.xlsReadSheetHolder().getHiddenRowIndexList().contains(cellRec.getRow())) { | |
31 | + return false; | |
32 | + } | |
33 | + } | |
34 | + return true; | |
17 | 35 | } |
18 | 36 | } | ... | ... |
src/main/java/com/taover/easyexcel/analysis/v03/handlers/BofRecordHandler.java
... | ... | @@ -10,8 +10,10 @@ import org.apache.poi.hssf.record.Record; |
10 | 10 | import com.taover.easyexcel.context.xls.XlsReadContext; |
11 | 11 | import com.taover.easyexcel.exception.ExcelAnalysisStopException; |
12 | 12 | import com.taover.easyexcel.read.metadata.ReadSheet; |
13 | +import com.taover.easyexcel.read.metadata.holder.ReadWorkbookHolder; | |
13 | 14 | import com.taover.easyexcel.read.metadata.holder.xls.XlsReadWorkbookHolder; |
14 | 15 | import com.taover.easyexcel.util.SheetUtils; |
16 | +import com.taover.easyexcel.util.StringUtils; | |
15 | 17 | |
16 | 18 | /** |
17 | 19 | * Record handler |
... | ... | @@ -42,7 +44,7 @@ public class BofRecordHandler extends AbstractXlsRecordHandler { |
42 | 44 | ReadSheet actualReadSheet = xlsReadWorkbookHolder.getActualSheetDataList().get(readSheetIndex); |
43 | 45 | assert actualReadSheet != null : "Can't find the sheet."; |
44 | 46 | // Copy the parameter to the current sheet |
45 | - ReadSheet readSheet = SheetUtils.match(actualReadSheet, xlsReadContext); | |
47 | + ReadSheet readSheet = this.filterReadSheet(actualReadSheet, xlsReadContext); | |
46 | 48 | if (readSheet != null) { |
47 | 49 | xlsReadContext.currentSheet(readSheet); |
48 | 50 | xlsReadContext.xlsReadWorkbookHolder().setIgnoreRecord(Boolean.FALSE); |
... | ... | @@ -53,7 +55,59 @@ public class BofRecordHandler extends AbstractXlsRecordHandler { |
53 | 55 | xlsReadWorkbookHolder.setReadSheetIndex(xlsReadWorkbookHolder.getReadSheetIndex() + 1); |
54 | 56 | } |
55 | 57 | |
56 | - private void initReadSheetDataList(XlsReadWorkbookHolder xlsReadWorkbookHolder) { | |
58 | + private ReadSheet filterReadSheet(ReadSheet readSheet, XlsReadContext analysisContext) { | |
59 | + ReadWorkbookHolder readWorkbookHolder = analysisContext.readWorkbookHolder(); | |
60 | + //hidden sheet not read | |
61 | + if(analysisContext.xlsReadWorkbookHolder().getHiddenBoundSheetIndexList().contains(readSheet.getSheetNo())) { | |
62 | + return null; | |
63 | + } | |
64 | + | |
65 | + //read all and not read just selected | |
66 | + if (readWorkbookHolder.getReadAll()) { | |
67 | + return readSheet; | |
68 | + } | |
69 | + | |
70 | + //read selected sheet | |
71 | + if(readWorkbookHolder.getReadJustSelected()) { | |
72 | + if(readSheet.getSheetNo() == analysisContext.xlsReadWorkbookHolder().getActiveSheetIndex()) { | |
73 | + return readSheet; | |
74 | + }else { | |
75 | + return null; | |
76 | + } | |
77 | + } | |
78 | + | |
79 | + //read by sheet no | |
80 | + for (ReadSheet parameterReadSheet : readWorkbookHolder.getParameterSheetDataList()) { | |
81 | + //remove null or hidden sheet | |
82 | + if (parameterReadSheet == null) { | |
83 | + continue; | |
84 | + } | |
85 | + if (parameterReadSheet.getSheetNo() == null && parameterReadSheet.getSheetName() == null) { | |
86 | + parameterReadSheet.setSheetNo(0); | |
87 | + } | |
88 | + boolean match = (parameterReadSheet.getSheetNo() != null | |
89 | + && parameterReadSheet.getSheetNo().equals(readSheet.getSheetNo())); | |
90 | + if (!match) { | |
91 | + String parameterSheetName = parameterReadSheet.getSheetName(); | |
92 | + if (!StringUtils.isEmpty(parameterSheetName)) { | |
93 | + boolean autoTrim = (parameterReadSheet.getAutoTrim() != null && parameterReadSheet.getAutoTrim()) | |
94 | + || (parameterReadSheet.getAutoTrim() == null | |
95 | + && analysisContext.readWorkbookHolder().getGlobalConfiguration().getAutoTrim()); | |
96 | + if (autoTrim) { | |
97 | + parameterSheetName = parameterSheetName.trim(); | |
98 | + } | |
99 | + match = parameterSheetName.equals(readSheet.getSheetName()); | |
100 | + } | |
101 | + } | |
102 | + if (match) { | |
103 | + readSheet.copyBasicParameter(parameterReadSheet); | |
104 | + return readSheet; | |
105 | + } | |
106 | + } | |
107 | + return null; | |
108 | + } | |
109 | + | |
110 | + private void initReadSheetDataList(XlsReadWorkbookHolder xlsReadWorkbookHolder) { | |
57 | 111 | if (xlsReadWorkbookHolder.getActualSheetDataList() != null) { |
58 | 112 | return; |
59 | 113 | } |
... | ... | @@ -63,7 +117,13 @@ public class BofRecordHandler extends AbstractXlsRecordHandler { |
63 | 117 | for (int i = 0; i < boundSheetRecords.length; i++) { |
64 | 118 | BoundSheetRecord boundSheetRecord = boundSheetRecords[i]; |
65 | 119 | ReadSheet readSheet = new ReadSheet(i, boundSheetRecord.getSheetname()); |
66 | - readSheetDataList.add(readSheet); | |
120 | + if(boundSheetRecord.isHidden() || boundSheetRecord.isVeryHidden()) { | |
121 | + readSheet.setSheetHidden(true); | |
122 | + xlsReadWorkbookHolder.getHiddenBoundSheetIndexList().add(i); | |
123 | + }else { | |
124 | + readSheet.setSheetHidden(false); | |
125 | + } | |
126 | + readSheetDataList.add(readSheet); | |
67 | 127 | } |
68 | 128 | xlsReadWorkbookHolder.setActualSheetDataList(readSheetDataList); |
69 | 129 | // Just need to get the list of sheets | ... | ... |
src/main/java/com/taover/easyexcel/analysis/v03/handlers/RowRecordHandler.java
0 → 100644
... | ... | @@ -0,0 +1,26 @@ |
1 | +package com.taover.easyexcel.analysis.v03.handlers; | |
2 | + | |
3 | +import org.apache.poi.hssf.record.Record; | |
4 | +import org.apache.poi.hssf.record.RowRecord; | |
5 | +import org.slf4j.Logger; | |
6 | +import org.slf4j.LoggerFactory; | |
7 | + | |
8 | +import com.taover.easyexcel.context.xls.XlsReadContext; | |
9 | + | |
10 | +/** | |
11 | + * Record handler | |
12 | + * | |
13 | + * @author Dan Zheng | |
14 | + */ | |
15 | +public class RowRecordHandler extends AbstractXlsRecordHandler { | |
16 | + private static final Logger LOGGER = LoggerFactory.getLogger(RowRecordHandler.class); | |
17 | + | |
18 | + @Override | |
19 | + public void processRecord(XlsReadContext xlsReadContext, Record record) { | |
20 | + RowRecord rowRecord = (RowRecord)record; | |
21 | + if(rowRecord.getZeroHeight() && | |
22 | + xlsReadContext.xlsReadSheetHolder() != null) { | |
23 | + xlsReadContext.xlsReadSheetHolder().getHiddenRowIndexList().add(rowRecord.getRowNumber()); | |
24 | + } | |
25 | + } | |
26 | +} | ... | ... |
src/main/java/com/taover/easyexcel/analysis/v03/handlers/WindowOneRecordHandler.java
0 → 100644
... | ... | @@ -0,0 +1,23 @@ |
1 | +package com.taover.easyexcel.analysis.v03.handlers; | |
2 | + | |
3 | +import org.apache.poi.hssf.record.Record; | |
4 | +import org.apache.poi.hssf.record.WindowOneRecord; | |
5 | +import org.slf4j.Logger; | |
6 | +import org.slf4j.LoggerFactory; | |
7 | + | |
8 | +import com.taover.easyexcel.context.xls.XlsReadContext; | |
9 | + | |
10 | +/** | |
11 | + * Record handler | |
12 | + * | |
13 | + * @author Dan Zheng | |
14 | + */ | |
15 | +public class WindowOneRecordHandler extends AbstractXlsRecordHandler { | |
16 | + private static final Logger LOGGER = LoggerFactory.getLogger(WindowOneRecordHandler.class); | |
17 | + | |
18 | + @Override | |
19 | + public void processRecord(XlsReadContext xlsReadContext, Record record) { | |
20 | + WindowOneRecord windowOne = (WindowOneRecord)record; | |
21 | + xlsReadContext.xlsReadWorkbookHolder().setActiveSheetIndex(windowOne.getActiveSheetIndex()); | |
22 | + } | |
23 | +} | ... | ... |
src/main/java/com/taover/easyexcel/analysis/v07/handlers/sax/XlsxRowHandler.java
... | ... | @@ -53,9 +53,9 @@ public class XlsxRowHandler extends DefaultHandler { |
53 | 53 | RowTagHandler rowTagHandler = new RowTagHandler(); |
54 | 54 | XLSX_CELL_HANDLER_MAP.put(ExcelXmlConstants.ROW_TAG, rowTagHandler); |
55 | 55 | XLSX_CELL_HANDLER_MAP.put(ExcelXmlConstants.X_ROW_TAG, rowTagHandler); |
56 | - SheetViewHandler sheetViewHandler = new SheetViewHandler(); | |
57 | - XLSX_CELL_HANDLER_MAP.put(ExcelXmlConstants.SHEET_VIEW_TAG, sheetViewHandler); | |
58 | - XLSX_CELL_HANDLER_MAP.put(ExcelXmlConstants.X_SHEET_VIEW_TAG, sheetViewHandler); | |
56 | +// SheetViewHandler sheetViewHandler = new SheetViewHandler(); | |
57 | +// XLSX_CELL_HANDLER_MAP.put(ExcelXmlConstants.SHEET_VIEW_TAG, sheetViewHandler); | |
58 | +// XLSX_CELL_HANDLER_MAP.put(ExcelXmlConstants.X_SHEET_VIEW_TAG, sheetViewHandler); | |
59 | 59 | } |
60 | 60 | |
61 | 61 | public XlsxRowHandler(XlsxReadContext xlsxReadContext) { | ... | ... |
src/main/java/com/taover/easyexcel/analysis/v07/workbook/WorkbookAnalyserImpl.java
... | ... | @@ -30,9 +30,14 @@ public class WorkbookAnalyserImpl implements WorkbookAnalyser { |
30 | 30 | public WorkbookAnalyserImpl(InputStream workbookInputStream) throws SAXException, IOException, ParserConfigurationException { |
31 | 31 | Document doc = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(workbookInputStream); |
32 | 32 | NodeList nList = doc.getElementsByTagName(TAG_NAME_WORKBOOK); |
33 | - Node workbookNode = nList.item(0); | |
34 | - this.initSheetList(this.getSheetsDoc(workbookNode.getOwnerDocument())); | |
35 | - this.initActiveTabIndex(this.getWorkbookViewDoc(workbookNode.getOwnerDocument())); | |
33 | + Node workbookNode = nList.item(0); | |
34 | + if(workbookNode != null) { | |
35 | + this.initSheetList(this.getSheetsDoc(workbookNode.getOwnerDocument())); | |
36 | + this.initActiveTabIndex(this.getWorkbookViewDoc(workbookNode.getOwnerDocument())); | |
37 | + }else { | |
38 | + this.activeTabIndex = 0; | |
39 | + this.sheetList = new ArrayList<WorkbookSheet>(); | |
40 | + } | |
36 | 41 | } |
37 | 42 | |
38 | 43 | private void initSheetList(List<Node> sheetsDoc) { |
... | ... | @@ -81,10 +86,13 @@ public class WorkbookAnalyserImpl implements WorkbookAnalyser { |
81 | 86 | } |
82 | 87 | |
83 | 88 | private List<Node> getSheetsDoc(Document workbook) { |
89 | + List<Node> result = new ArrayList<Node>(); | |
90 | + if(workbook == null) { | |
91 | + return result; | |
92 | + } | |
84 | 93 | NodeList sheetsNodeList = workbook.getElementsByTagName(TAG_NAME_SHEETS); |
85 | 94 | Node sheetsNode = sheetsNodeList.item(0); |
86 | - NodeList sheetNodeList = sheetsNode.getChildNodes(); | |
87 | - List<Node> result = new ArrayList<Node>(); | |
95 | + NodeList sheetNodeList = sheetsNode.getChildNodes(); | |
88 | 96 | for(int i=0; i<sheetNodeList.getLength(); ++i) { |
89 | 97 | result.add(sheetNodeList.item(i)); |
90 | 98 | } |
... | ... | @@ -92,10 +100,13 @@ public class WorkbookAnalyserImpl implements WorkbookAnalyser { |
92 | 100 | } |
93 | 101 | |
94 | 102 | private List<Node> getWorkbookViewDoc(Document workbook) { |
103 | + List<Node> result = new ArrayList<Node>(); | |
104 | + if(workbook == null) { | |
105 | + return result; | |
106 | + } | |
95 | 107 | NodeList sheetsNodeList = workbook.getElementsByTagName(TAG_NAME_BOOKVIEWS); |
96 | 108 | Node sheetsNode = sheetsNodeList.item(0); |
97 | - NodeList sheetNodeList = sheetsNode.getChildNodes(); | |
98 | - List<Node> result = new ArrayList<Node>(); | |
109 | + NodeList sheetNodeList = sheetsNode.getChildNodes(); | |
99 | 110 | for(int i=0; i<sheetNodeList.getLength(); ++i) { |
100 | 111 | result.add(sheetNodeList.item(i)); |
101 | 112 | } | ... | ... |
src/main/java/com/taover/easyexcel/read/builder/ExcelReaderBuilder.java
... | ... | @@ -217,7 +217,7 @@ public class ExcelReaderBuilder extends AbstractExcelReaderParameterBuilder<Exce |
217 | 217 | * |
218 | 218 | * @return |
219 | 219 | */ |
220 | - public <T> List<T> doReadAllSync() { | |
220 | + public <T> List<T> doReadAllSync() { | |
221 | 221 | SyncReadListener syncReadListener = new SyncReadListener(); |
222 | 222 | registerReadListener(syncReadListener); |
223 | 223 | ExcelReader excelReader = build(); | ... | ... |
src/main/java/com/taover/easyexcel/read/metadata/holder/xls/XlsReadSheetHolder.java
1 | 1 | package com.taover.easyexcel.read.metadata.holder.xls; |
2 | 2 | |
3 | +import java.util.ArrayList; | |
3 | 4 | import java.util.HashMap; |
5 | +import java.util.List; | |
4 | 6 | import java.util.Map; |
5 | 7 | |
6 | 8 | import com.taover.easyexcel.enums.RowTypeEnum; |
... | ... | @@ -26,11 +28,14 @@ public class XlsReadSheetHolder extends ReadSheetHolder { |
26 | 28 | * Temp object index. |
27 | 29 | */ |
28 | 30 | private Map<Integer, String> objectCacheMap; |
31 | + | |
32 | + List<Integer> hiddenRowIndexList; | |
29 | 33 | |
30 | 34 | public XlsReadSheetHolder(ReadSheet readSheet, ReadWorkbookHolder readWorkbookHolder) { |
31 | 35 | super(readSheet, readWorkbookHolder); |
32 | 36 | tempRowType = RowTypeEnum.EMPTY; |
33 | 37 | objectCacheMap = new HashMap<Integer, String>(16); |
38 | + hiddenRowIndexList = new ArrayList<Integer>(16); | |
34 | 39 | } |
35 | 40 | |
36 | 41 | public RowTypeEnum getTempRowType() { |
... | ... | @@ -57,4 +62,12 @@ public class XlsReadSheetHolder extends ReadSheetHolder { |
57 | 62 | public void setObjectCacheMap(Map<Integer, String> objectCacheMap) { |
58 | 63 | this.objectCacheMap = objectCacheMap; |
59 | 64 | } |
65 | + | |
66 | + public List<Integer> getHiddenRowIndexList() { | |
67 | + return hiddenRowIndexList; | |
68 | + } | |
69 | + | |
70 | + public void setHiddenRowIndexList(List<Integer> hiddenRowIndexList) { | |
71 | + this.hiddenRowIndexList = hiddenRowIndexList; | |
72 | + } | |
60 | 73 | } | ... | ... |
src/main/java/com/taover/easyexcel/read/metadata/holder/xls/XlsReadWorkbookHolder.java
... | ... | @@ -46,6 +46,9 @@ public class XlsReadWorkbookHolder extends ReadWorkbookHolder { |
46 | 46 | * Ignore record. |
47 | 47 | */ |
48 | 48 | private Boolean ignoreRecord; |
49 | + | |
50 | + private int activeSheetIndex = 0; | |
51 | + private List<Integer> hiddenBoundSheetIndexList = new ArrayList<Integer>(); | |
49 | 52 | |
50 | 53 | public XlsReadWorkbookHolder(ReadWorkbook readWorkbook) { |
51 | 54 | super(readWorkbook); |
... | ... | @@ -113,4 +116,20 @@ public class XlsReadWorkbookHolder extends ReadWorkbookHolder { |
113 | 116 | public void setIgnoreRecord(Boolean ignoreRecord) { |
114 | 117 | this.ignoreRecord = ignoreRecord; |
115 | 118 | } |
119 | + | |
120 | + public int getActiveSheetIndex() { | |
121 | + return activeSheetIndex; | |
122 | + } | |
123 | + | |
124 | + public void setActiveSheetIndex(int activeSheetIndex) { | |
125 | + this.activeSheetIndex = activeSheetIndex; | |
126 | + } | |
127 | + | |
128 | + public List<Integer> getHiddenBoundSheetIndexList() { | |
129 | + return hiddenBoundSheetIndexList; | |
130 | + } | |
131 | + | |
132 | + public void setHiddenBoundSheetIndexList(List<Integer> hiddenBoundSheetIndexList) { | |
133 | + this.hiddenBoundSheetIndexList = hiddenBoundSheetIndexList; | |
134 | + } | |
116 | 135 | } | ... | ... |
src/main/java/com/taover/easyexcel/util/SheetUtils.java
... | ... | @@ -28,27 +28,10 @@ public class SheetUtils { |
28 | 28 | public static ReadSheet match(ReadSheet readSheet, AnalysisContext analysisContext) { |
29 | 29 | ReadWorkbookHolder readWorkbookHolder = analysisContext.readWorkbookHolder(); |
30 | 30 | //read all and not read just selected |
31 | - if (readWorkbookHolder.getReadAll()) { | |
31 | + if (readWorkbookHolder.getReadAll() || readWorkbookHolder.getReadJustSelected()) { | |
32 | 32 | return readSheet; |
33 | 33 | } |
34 | 34 | |
35 | - if(readWorkbookHolder.getParameterSheetDataList() == null) { | |
36 | - return null; | |
37 | - } | |
38 | - | |
39 | - //read just selected | |
40 | - if(readWorkbookHolder.getReadJustSelected()) { | |
41 | - for (ReadSheet parameterReadSheet : readWorkbookHolder.getParameterSheetDataList()) { | |
42 | - if (parameterReadSheet == null) { | |
43 | - continue; | |
44 | - } | |
45 | - if(parameterReadSheet.getSheetSelected() != null && parameterReadSheet.getSheetSelected()) { | |
46 | - readSheet.copyBasicParameter(parameterReadSheet); | |
47 | - return readSheet; | |
48 | - } | |
49 | - } | |
50 | - } | |
51 | - | |
52 | 35 | //read by sheet no |
53 | 36 | for (ReadSheet parameterReadSheet : readWorkbookHolder.getParameterSheetDataList()) { |
54 | 37 | //remove null or hidden sheet | ... | ... |
src/test/java/com/taover/easyexcel/test/demo/read/ReadTest.java
... | ... | @@ -252,7 +252,7 @@ public class ReadTest { |
252 | 252 | // } |
253 | 253 | |
254 | 254 | // 这里 也可以不指定class,返回一个list,然后读取第一个sheet 同步读取会自动finish |
255 | - List<Map<Integer, String>> listMap = EasyExcel.read("D://debug//hiddensheet//demo.xls").headRowNumber(0).readHiddenRow(false).doReadSelectedSync(); | |
255 | + List<Map<Integer, String>> listMap = EasyExcel.read("D://debug//hiddensheet//demo.xlsx").headRowNumber(0).readHiddenRow(false).doReadSelectedSync(); | |
256 | 256 | for (Map<Integer, String> data : listMap) { |
257 | 257 | // 返回每条数据的键值对 表示所在的列 和所在列的值 |
258 | 258 | LOGGER.info("读取到数据:{}", JSON.toJSONString(data)); |
... | ... | @@ -274,17 +274,18 @@ public class ReadTest { |
274 | 274 | } |
275 | 275 | |
276 | 276 | public void readTestSynchronousRead() { |
277 | - String dirStr = "D://debug//suffixwrong//"; | |
277 | + String dirStr = "D:\\debug\\readtest\\"; | |
278 | 278 | File dDir = new File(dirStr); |
279 | 279 | String[] sonFileNameArr = dDir.list(); |
280 | 280 | for(String item: sonFileNameArr) { |
281 | 281 | try { |
282 | 282 | LOGGER.info("======文件名称:"+item+"======"); |
283 | - List<Map<Integer, String>> listMap = EasyExcel.read(dirStr+item).headRowNumber(0).readHiddenRow(false).doReadSelectedSync(); | |
284 | - for (Map<Integer, String> data : listMap) { | |
285 | - // 返回每条数据的键值对 表示所在的列 和所在列的值 | |
286 | - LOGGER.info(">{}", JSON.toJSONString(data)); | |
287 | - } | |
283 | + Map<Integer, List<Map<Integer, Object>>> listMap = EasyExcel.read(dirStr+item).headRowNumber(0).readHiddenRow(false).doReadAllSyncForMap(); | |
284 | +// for (Map<Integer, String> data : listMap) { | |
285 | +// // 返回每条数据的键值对 表示所在的列 和所在列的值 | |
286 | +// //LOGGER.info(">{}", JSON.toJSONString(data)); | |
287 | +// } | |
288 | + LOGGER.info(">SUCCESS{}", JSON.toJSONString(listMap)); | |
288 | 289 | }catch (Exception e) { |
289 | 290 | e.printStackTrace(); |
290 | 291 | } | ... | ... |