Commit c14fb4ccfd311384f938c2e3321df49b9527e239
1 parent
d360ed14
Exists in
master
xlsx remove hidden sheet
Showing
14 changed files
with
328 additions
and
71 deletions
Show diff stats
src/main/java/com/taover/easyexcel/ExcelReader.java
@@ -159,7 +159,14 @@ public class ExcelReader { | @@ -159,7 +159,14 @@ public class ExcelReader { | ||
159 | * Parse all sheet content by default | 159 | * Parse all sheet content by default |
160 | */ | 160 | */ |
161 | public void readAll() { | 161 | public void readAll() { |
162 | - excelAnalyser.analysis(null, Boolean.TRUE); | 162 | + excelAnalyser.analysis(null, Boolean.TRUE, Boolean.FALSE); |
163 | + } | ||
164 | + | ||
165 | + /** | ||
166 | + * Parse select sheet content by default | ||
167 | + */ | ||
168 | + public void readSelected() { | ||
169 | + excelAnalyser.analysis(null, Boolean.FALSE, Boolean.TRUE); | ||
163 | } | 170 | } |
164 | 171 | ||
165 | /** | 172 | /** |
@@ -179,7 +186,7 @@ public class ExcelReader { | @@ -179,7 +186,7 @@ public class ExcelReader { | ||
179 | * @return | 186 | * @return |
180 | */ | 187 | */ |
181 | public ExcelReader read(List<ReadSheet> readSheetList) { | 188 | public ExcelReader read(List<ReadSheet> readSheetList) { |
182 | - excelAnalyser.analysis(readSheetList, Boolean.FALSE); | 189 | + excelAnalyser.analysis(readSheetList, Boolean.FALSE, Boolean.FALSE); |
183 | return this; | 190 | return this; |
184 | } | 191 | } |
185 | 192 |
src/main/java/com/taover/easyexcel/analysis/ExcelAnalyser.java
@@ -19,7 +19,7 @@ public interface ExcelAnalyser { | @@ -19,7 +19,7 @@ public interface ExcelAnalyser { | ||
19 | * @param readAll | 19 | * @param readAll |
20 | * The <code>readSheetList</code> parameter is ignored, and all sheets are read. | 20 | * The <code>readSheetList</code> parameter is ignored, and all sheets are read. |
21 | */ | 21 | */ |
22 | - void analysis(List<ReadSheet> readSheetList, Boolean readAll); | 22 | + void analysis(List<ReadSheet> readSheetList, Boolean readAll, Boolean readSelected); |
23 | 23 | ||
24 | /** | 24 | /** |
25 | * Complete the entire read file.Release the cache and close stream | 25 | * Complete the entire read file.Release the cache and close stream |
src/main/java/com/taover/easyexcel/analysis/ExcelAnalyserImpl.java
@@ -104,24 +104,14 @@ public class ExcelAnalyserImpl implements ExcelAnalyser { | @@ -104,24 +104,14 @@ public class ExcelAnalyserImpl implements ExcelAnalyser { | ||
104 | } | 104 | } |
105 | 105 | ||
106 | @Override | 106 | @Override |
107 | - public void analysis(List<ReadSheet> readSheetList, Boolean readAll) { | 107 | + public void analysis(List<ReadSheet> readSheetList, Boolean readAll, Boolean readSelected) { |
108 | try { | 108 | try { |
109 | - if (!readAll && CollectionUtils.isEmpty(readSheetList)) { | 109 | + if (CollectionUtils.isEmpty(readSheetList) && !readAll && !readSelected) { |
110 | throw new IllegalArgumentException("Specify at least one read sheet."); | 110 | throw new IllegalArgumentException("Specify at least one read sheet."); |
111 | } | 111 | } |
112 | analysisContext.readWorkbookHolder().setParameterSheetDataList(readSheetList); | 112 | analysisContext.readWorkbookHolder().setParameterSheetDataList(readSheetList); |
113 | analysisContext.readWorkbookHolder().setReadAll(readAll); | 113 | analysisContext.readWorkbookHolder().setReadAll(readAll); |
114 | - analysisContext.readWorkbookHolder().setReadJustSelected(false); | ||
115 | - | ||
116 | - if(readSheetList != null) { | ||
117 | - for(ReadSheet item: readSheetList) { | ||
118 | - if(item.getSheetSelected() != null && item.getSheetSelected()) { | ||
119 | - analysisContext.readWorkbookHolder().setReadJustSelected(true); | ||
120 | - analysisContext.readWorkbookHolder().setReadAll(true); | ||
121 | - break; | ||
122 | - } | ||
123 | - } | ||
124 | - } | 114 | + analysisContext.readWorkbookHolder().setReadJustSelected(readSelected); |
125 | 115 | ||
126 | try { | 116 | try { |
127 | excelReadExecutor.execute(); | 117 | excelReadExecutor.execute(); |
src/main/java/com/taover/easyexcel/analysis/v03/XlsSaxAnalyser.java
@@ -148,6 +148,8 @@ public class XlsSaxAnalyser implements HSSFListener, ExcelReadExecutor { | @@ -148,6 +148,8 @@ public class XlsSaxAnalyser implements HSSFListener, ExcelReadExecutor { | ||
148 | 148 | ||
149 | @Override | 149 | @Override |
150 | public void processRecord(Record record) { | 150 | public void processRecord(Record record) { |
151 | + System.out.println(record); | ||
152 | + | ||
151 | //flush global data | 153 | //flush global data |
152 | this.initGlobalXlsData(xlsReadContext, record); | 154 | this.initGlobalXlsData(xlsReadContext, record); |
153 | 155 | ||
@@ -182,7 +184,7 @@ public class XlsSaxAnalyser implements HSSFListener, ExcelReadExecutor { | @@ -182,7 +184,7 @@ public class XlsSaxAnalyser implements HSSFListener, ExcelReadExecutor { | ||
182 | } | 184 | } |
183 | } | 185 | } |
184 | 186 | ||
185 | - public boolean needSkip(XlsReadContext xlsReadContext, Record record) { | 187 | + private boolean needSkip(XlsReadContext xlsReadContext, Record record) { |
186 | if(record.getSid() == RowRecord.sid) { | 188 | if(record.getSid() == RowRecord.sid) { |
187 | RowRecord rowRec = (RowRecord) record; | 189 | RowRecord rowRec = (RowRecord) record; |
188 | Boolean readHiddenRow = xlsReadContext.xlsReadWorkbookHolder().getReadHiddenRow(); | 190 | Boolean readHiddenRow = xlsReadContext.xlsReadWorkbookHolder().getReadHiddenRow(); |
src/main/java/com/taover/easyexcel/analysis/v07/XlsxSaxAnalyser.java
@@ -33,6 +33,8 @@ import org.xml.sax.XMLReader; | @@ -33,6 +33,8 @@ import org.xml.sax.XMLReader; | ||
33 | import com.taover.easyexcel.analysis.ExcelReadExecutor; | 33 | import com.taover.easyexcel.analysis.ExcelReadExecutor; |
34 | import com.taover.easyexcel.analysis.v07.handlers.sax.SharedStringsTableHandler; | 34 | import com.taover.easyexcel.analysis.v07.handlers.sax.SharedStringsTableHandler; |
35 | import com.taover.easyexcel.analysis.v07.handlers.sax.XlsxRowHandler; | 35 | import com.taover.easyexcel.analysis.v07.handlers.sax.XlsxRowHandler; |
36 | +import com.taover.easyexcel.analysis.v07.workbook.WorkbookAnalyser; | ||
37 | +import com.taover.easyexcel.analysis.v07.workbook.WorkbookAnalyserImpl; | ||
36 | import com.taover.easyexcel.cache.ReadCache; | 38 | import com.taover.easyexcel.cache.ReadCache; |
37 | import com.taover.easyexcel.context.xlsx.XlsxReadContext; | 39 | import com.taover.easyexcel.context.xlsx.XlsxReadContext; |
38 | import com.taover.easyexcel.enums.CellExtraTypeEnum; | 40 | import com.taover.easyexcel.enums.CellExtraTypeEnum; |
@@ -40,10 +42,10 @@ import com.taover.easyexcel.exception.ExcelAnalysisException; | @@ -40,10 +42,10 @@ import com.taover.easyexcel.exception.ExcelAnalysisException; | ||
40 | import com.taover.easyexcel.exception.SheetNotSelectedException; | 42 | import com.taover.easyexcel.exception.SheetNotSelectedException; |
41 | import com.taover.easyexcel.metadata.CellExtra; | 43 | import com.taover.easyexcel.metadata.CellExtra; |
42 | import com.taover.easyexcel.read.metadata.ReadSheet; | 44 | import com.taover.easyexcel.read.metadata.ReadSheet; |
45 | +import com.taover.easyexcel.read.metadata.holder.ReadWorkbookHolder; | ||
43 | import com.taover.easyexcel.read.metadata.holder.xlsx.XlsxReadWorkbookHolder; | 46 | import com.taover.easyexcel.read.metadata.holder.xlsx.XlsxReadWorkbookHolder; |
44 | import com.taover.easyexcel.util.CollectionUtils; | 47 | import com.taover.easyexcel.util.CollectionUtils; |
45 | import com.taover.easyexcel.util.FileUtils; | 48 | import com.taover.easyexcel.util.FileUtils; |
46 | -import com.taover.easyexcel.util.SheetUtils; | ||
47 | import com.taover.easyexcel.util.StringUtils; | 49 | import com.taover.easyexcel.util.StringUtils; |
48 | 50 | ||
49 | /** | 51 | /** |
@@ -92,9 +94,13 @@ public class XlsxSaxAnalyser implements ExcelReadExecutor { | @@ -92,9 +94,13 @@ public class XlsxSaxAnalyser implements ExcelReadExecutor { | ||
92 | if (!ite.hasNext()) { | 94 | if (!ite.hasNext()) { |
93 | throw new ExcelAnalysisException("Can not find any sheet!"); | 95 | throw new ExcelAnalysisException("Can not find any sheet!"); |
94 | } | 96 | } |
95 | - while (ite.hasNext()) { | 97 | + |
98 | + WorkbookAnalyser wbAnalyser = new WorkbookAnalyserImpl(xssfReader.getWorkbookData()); | ||
99 | + while (ite.hasNext()) { | ||
96 | InputStream inputStream = ite.next(); | 100 | InputStream inputStream = ite.next(); |
97 | - sheetList.add(new ReadSheet(index, ite.getSheetName())); | 101 | + boolean isHidden = wbAnalyser.isHiddenSheet(index); |
102 | + boolean isActive = (index == wbAnalyser.getActiveTabIndexInSheetList()); | ||
103 | + sheetList.add(new ReadSheet(index, ite.getSheetName(), isActive, isHidden)); | ||
98 | sheetMap.put(index, inputStream); | 104 | sheetMap.put(index, inputStream); |
99 | if (xlsxReadContext.readWorkbookHolder().getExtraReadSet().contains(CellExtraTypeEnum.COMMENT)) { | 105 | if (xlsxReadContext.readWorkbookHolder().getExtraReadSet().contains(CellExtraTypeEnum.COMMENT)) { |
100 | CommentsTable commentsTable = ite.getSheetComments(); | 106 | CommentsTable commentsTable = ite.getSheetComments(); |
@@ -203,20 +209,61 @@ public class XlsxSaxAnalyser implements ExcelReadExecutor { | @@ -203,20 +209,61 @@ public class XlsxSaxAnalyser implements ExcelReadExecutor { | ||
203 | 209 | ||
204 | @Override | 210 | @Override |
205 | public void execute() { | 211 | public void execute() { |
206 | - for (ReadSheet readSheet : sheetList) { | ||
207 | - readSheet = SheetUtils.match(readSheet, xlsxReadContext); | ||
208 | - if (readSheet != null) { | ||
209 | - xlsxReadContext.currentSheet(readSheet); | ||
210 | - parseXmlSource(sheetMap.get(readSheet.getSheetNo()), new XlsxRowHandler(xlsxReadContext)); | ||
211 | - // Read comments | ||
212 | - readComments(readSheet); | ||
213 | - // The last sheet is read | ||
214 | - xlsxReadContext.analysisEventProcessor().endSheet(xlsxReadContext); | ||
215 | - } | 212 | + List<ReadSheet> readSheetList = this.filterSheetList(sheetList, xlsxReadContext); |
213 | + for (ReadSheet readSheet : readSheetList) { | ||
214 | + xlsxReadContext.currentSheet(readSheet); | ||
215 | + parseXmlSource(sheetMap.get(readSheet.getSheetNo()), new XlsxRowHandler(xlsxReadContext)); | ||
216 | + // Read comments | ||
217 | + readComments(readSheet); | ||
218 | + // The last sheet is read | ||
219 | + xlsxReadContext.analysisEventProcessor().endSheet(xlsxReadContext); | ||
216 | } | 220 | } |
217 | } | 221 | } |
218 | 222 | ||
219 | - private void readComments(ReadSheet readSheet) { | 223 | + private List<ReadSheet> filterSheetList(List<ReadSheet> sheetList, XlsxReadContext analysisContext) { |
224 | + ReadWorkbookHolder readWorkbookHolder = analysisContext.readWorkbookHolder(); | ||
225 | + List<ReadSheet> sheetData = this.sheetList; | ||
226 | + List<ReadSheet> result = new ArrayList<ReadSheet>(); | ||
227 | + if(sheetData.isEmpty()) { | ||
228 | + return result; | ||
229 | + } | ||
230 | + for(ReadSheet item: sheetData) { | ||
231 | + if(readWorkbookHolder.getReadAll()) { | ||
232 | + if(!item.getSheetHidden()) { | ||
233 | + result.add(item); | ||
234 | + } | ||
235 | + }else if(readWorkbookHolder.getReadJustSelected()) { | ||
236 | + if(item.getSheetSelected()) { | ||
237 | + result.add(item); | ||
238 | + } | ||
239 | + }else { | ||
240 | + for(ReadSheet innerItem: sheetList) { | ||
241 | + boolean match = (item.getSheetNo() != null && item.getSheetNo().equals(innerItem.getSheetNo())); | ||
242 | + if (!match) { | ||
243 | + String parameterSheetName = item.getSheetName(); | ||
244 | + if (!StringUtils.isEmpty(parameterSheetName)) { | ||
245 | + boolean autoTrim = (item.getAutoTrim() != null && item.getAutoTrim()) | ||
246 | + || (item.getAutoTrim() == null && analysisContext.readWorkbookHolder().getGlobalConfiguration().getAutoTrim()); | ||
247 | + if (autoTrim) { | ||
248 | + parameterSheetName = parameterSheetName.trim(); | ||
249 | + } | ||
250 | + match = parameterSheetName.equals(innerItem.getSheetName()); | ||
251 | + } | ||
252 | + } | ||
253 | + if (match) { | ||
254 | + item.copyBasicParameter(innerItem); | ||
255 | + result.add(innerItem); | ||
256 | + } | ||
257 | + } | ||
258 | + } | ||
259 | + } | ||
260 | + if(result.isEmpty()) { | ||
261 | + result.add(sheetData.get(0)); | ||
262 | + } | ||
263 | + return result; | ||
264 | + } | ||
265 | + | ||
266 | + private void readComments(ReadSheet readSheet) { | ||
220 | if (!xlsxReadContext.readWorkbookHolder().getExtraReadSet().contains(CellExtraTypeEnum.COMMENT)) { | 267 | if (!xlsxReadContext.readWorkbookHolder().getExtraReadSet().contains(CellExtraTypeEnum.COMMENT)) { |
221 | return; | 268 | return; |
222 | } | 269 | } |
src/main/java/com/taover/easyexcel/analysis/v07/handlers/sax/XlsxRowHandler.java
@@ -3,8 +3,6 @@ package com.taover.easyexcel.analysis.v07.handlers.sax; | @@ -3,8 +3,6 @@ package com.taover.easyexcel.analysis.v07.handlers.sax; | ||
3 | import java.util.HashMap; | 3 | import java.util.HashMap; |
4 | import java.util.Map; | 4 | import java.util.Map; |
5 | 5 | ||
6 | -import org.slf4j.Logger; | ||
7 | -import org.slf4j.LoggerFactory; | ||
8 | import org.xml.sax.Attributes; | 6 | import org.xml.sax.Attributes; |
9 | import org.xml.sax.SAXException; | 7 | import org.xml.sax.SAXException; |
10 | import org.xml.sax.helpers.DefaultHandler; | 8 | import org.xml.sax.helpers.DefaultHandler; |
@@ -26,7 +24,6 @@ import com.taover.easyexcel.context.xlsx.XlsxReadContext; | @@ -26,7 +24,6 @@ import com.taover.easyexcel.context.xlsx.XlsxReadContext; | ||
26 | * @author jipengfei | 24 | * @author jipengfei |
27 | */ | 25 | */ |
28 | public class XlsxRowHandler extends DefaultHandler { | 26 | public class XlsxRowHandler extends DefaultHandler { |
29 | - private static final Logger LOGGER = LoggerFactory.getLogger(XlsxRowHandler.class); | ||
30 | private static final boolean XLSX_DEBUG_PRINT_INFO = false; | 27 | private static final boolean XLSX_DEBUG_PRINT_INFO = false; |
31 | private XlsxReadContext xlsxReadContext; | 28 | private XlsxReadContext xlsxReadContext; |
32 | private static final Map<String, XlsxTagHandler> XLSX_CELL_HANDLER_MAP = new HashMap<String, XlsxTagHandler>(32); | 29 | private static final Map<String, XlsxTagHandler> XLSX_CELL_HANDLER_MAP = new HashMap<String, XlsxTagHandler>(32); |
@@ -82,15 +79,15 @@ public class XlsxRowHandler extends DefaultHandler { | @@ -82,15 +79,15 @@ public class XlsxRowHandler extends DefaultHandler { | ||
82 | } | 79 | } |
83 | 80 | ||
84 | private void printElement(String title, String uri, String localName, String name, Attributes attributes) { | 81 | private void printElement(String title, String uri, String localName, String name, Attributes attributes) { |
85 | - LOGGER.debug("======"+title+"======"); | ||
86 | - LOGGER.debug("> uri:"+uri); | ||
87 | - LOGGER.debug("> localName:"+localName); | ||
88 | - LOGGER.debug("> name:"+name); | 82 | + System.out.println("======"+title+"======"); |
83 | + System.out.println("> uri:"+uri); | ||
84 | + System.out.println("> localName:"+localName); | ||
85 | + System.out.println("> name:"+name); | ||
89 | if(attributes == null) { | 86 | if(attributes == null) { |
90 | return; | 87 | return; |
91 | } | 88 | } |
92 | for(int i=0; i<attributes.getLength(); ++i) { | 89 | for(int i=0; i<attributes.getLength(); ++i) { |
93 | - LOGGER.debug(">> attributes["+i+"]->uri:"+attributes.getURI(i)+",qName:"+attributes.getQName(i)+",value:"+attributes.getValue(i)); | 90 | + System.out.println(">> attributes["+i+"]->uri:"+attributes.getURI(i)+",localname:"+attributes.getLocalName(i)+",qName:"+attributes.getQName(i)+",type:"+attributes.getType(i)+",value:"+attributes.getValue(i)); |
94 | } | 91 | } |
95 | } | 92 | } |
96 | 93 | ||
@@ -113,8 +110,8 @@ public class XlsxRowHandler extends DefaultHandler { | @@ -113,8 +110,8 @@ public class XlsxRowHandler extends DefaultHandler { | ||
113 | } | 110 | } |
114 | 111 | ||
115 | private void printCharacters(char[] ch, int start, int length) { | 112 | private void printCharacters(char[] ch, int start, int length) { |
116 | - LOGGER.debug(">>>>>>characters>>>>>>"); | ||
117 | - LOGGER.debug(new String(ch, start, length)); | 113 | + System.out.println(">>>>>>characters>>>>>>"); |
114 | + System.out.println(new String(ch, start, length)); | ||
118 | } | 115 | } |
119 | 116 | ||
120 | @Override | 117 | @Override |
src/main/java/com/taover/easyexcel/analysis/v07/metadata/WorkbookSheet.java
0 → 100644
@@ -0,0 +1,58 @@ | @@ -0,0 +1,58 @@ | ||
1 | +package com.taover.easyexcel.analysis.v07.metadata; | ||
2 | + | ||
3 | +import org.w3c.dom.NamedNodeMap; | ||
4 | +import org.w3c.dom.Node; | ||
5 | + | ||
6 | +public class WorkbookSheet { | ||
7 | + private String name; | ||
8 | + private String sheetId; | ||
9 | + private String state; | ||
10 | + | ||
11 | + public WorkbookSheet(String name, String sheetId, String state) { | ||
12 | + super(); | ||
13 | + this.name = name; | ||
14 | + this.sheetId = sheetId; | ||
15 | + this.state = state; | ||
16 | + } | ||
17 | + | ||
18 | + public WorkbookSheet(Node node) { | ||
19 | + NamedNodeMap attrs = node.getAttributes(); | ||
20 | + Node nameNode = attrs.getNamedItem("name"); | ||
21 | + Node sheetIdNode = attrs.getNamedItem("sheetId"); | ||
22 | + Node stateNode = attrs.getNamedItem("state"); | ||
23 | + if(nameNode != null) { | ||
24 | + this.name = nameNode.getNodeValue(); | ||
25 | + }else { | ||
26 | + this.name = ""; | ||
27 | + } | ||
28 | + if(sheetIdNode != null) { | ||
29 | + this.sheetId = sheetIdNode.getNodeValue(); | ||
30 | + }else { | ||
31 | + this.sheetId = ""; | ||
32 | + } | ||
33 | + if(stateNode != null) { | ||
34 | + this.state = stateNode.getNodeValue(); | ||
35 | + }else { | ||
36 | + this.state = ""; | ||
37 | + } | ||
38 | + } | ||
39 | + | ||
40 | + public String getState() { | ||
41 | + return state; | ||
42 | + } | ||
43 | + public void setState(String state) { | ||
44 | + this.state = state; | ||
45 | + } | ||
46 | + public String getName() { | ||
47 | + return name; | ||
48 | + } | ||
49 | + public void setName(String name) { | ||
50 | + this.name = name; | ||
51 | + } | ||
52 | + public String getSheetId() { | ||
53 | + return sheetId; | ||
54 | + } | ||
55 | + public void setSheetId(String sheetId) { | ||
56 | + this.sheetId = sheetId; | ||
57 | + } | ||
58 | +} |
src/main/java/com/taover/easyexcel/analysis/v07/workbook/WorkbookAnalyser.java
0 → 100644
@@ -0,0 +1,13 @@ | @@ -0,0 +1,13 @@ | ||
1 | +package com.taover.easyexcel.analysis.v07.workbook; | ||
2 | + | ||
3 | +import java.util.List; | ||
4 | + | ||
5 | +import com.taover.easyexcel.analysis.v07.metadata.WorkbookSheet; | ||
6 | + | ||
7 | +public interface WorkbookAnalyser { | ||
8 | + int getActiveTabIndexInSheetList(); | ||
9 | + | ||
10 | + List<WorkbookSheet> getSheetList(); | ||
11 | + | ||
12 | + boolean isHiddenSheet(int sheetIndex); | ||
13 | +} |
src/main/java/com/taover/easyexcel/analysis/v07/workbook/WorkbookAnalyserImpl.java
0 → 100644
@@ -0,0 +1,123 @@ | @@ -0,0 +1,123 @@ | ||
1 | +package com.taover.easyexcel.analysis.v07.workbook; | ||
2 | + | ||
3 | +import java.io.IOException; | ||
4 | +import java.io.InputStream; | ||
5 | +import java.util.ArrayList; | ||
6 | +import java.util.List; | ||
7 | + | ||
8 | +import javax.xml.parsers.DocumentBuilderFactory; | ||
9 | +import javax.xml.parsers.ParserConfigurationException; | ||
10 | + | ||
11 | +import org.w3c.dom.Document; | ||
12 | +import org.w3c.dom.NamedNodeMap; | ||
13 | +import org.w3c.dom.Node; | ||
14 | +import org.w3c.dom.NodeList; | ||
15 | +import org.xml.sax.SAXException; | ||
16 | + | ||
17 | +import com.taover.easyexcel.analysis.v07.metadata.WorkbookSheet; | ||
18 | + | ||
19 | +public class WorkbookAnalyserImpl implements WorkbookAnalyser { | ||
20 | + private static String TAG_NAME_WORKBOOK = "workbook"; | ||
21 | + private static String TAG_NAME_WORKBOOKVIEW = "workbookView"; | ||
22 | + private static String TAG_NAME_ACTIVETAB = "activeTab"; | ||
23 | + private static String TAG_NAME_SHEETS = "sheets"; | ||
24 | + private static String TAG_NAME_BOOKVIEWS = "bookViews"; | ||
25 | + private static String ATTR_STATE_V_HIDDEN = "hidden"; | ||
26 | + | ||
27 | + private int activeTabIndex; | ||
28 | + private List<WorkbookSheet> sheetList; | ||
29 | + | ||
30 | + public WorkbookAnalyserImpl(InputStream workbookInputStream) throws SAXException, IOException, ParserConfigurationException { | ||
31 | + Document doc = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(workbookInputStream); | ||
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())); | ||
36 | + } | ||
37 | + | ||
38 | + private void initSheetList(List<Node> sheetsDoc) { | ||
39 | + this.sheetList = new ArrayList<WorkbookSheet>(); | ||
40 | + if(sheetsDoc == null || sheetsDoc.isEmpty()) { | ||
41 | + return; | ||
42 | + } | ||
43 | + for(int i=0; i<sheetsDoc.size(); ++i) { | ||
44 | + this.sheetList.add(new WorkbookSheet(sheetsDoc.get(i))); | ||
45 | + } | ||
46 | + } | ||
47 | + | ||
48 | + private void initActiveTabIndex(List<Node> workbookViewDoc) { | ||
49 | + if(workbookViewDoc == null || workbookViewDoc.isEmpty()) { | ||
50 | + this.activeTabIndex = 0; | ||
51 | + } | ||
52 | + Integer activeTab = null; | ||
53 | + for(int i=0; i<workbookViewDoc.size(); ++i) { | ||
54 | + Node item = workbookViewDoc.get(i); | ||
55 | + if(item.getNodeName().equals(TAG_NAME_WORKBOOKVIEW)) { | ||
56 | + NamedNodeMap attrs = item.getAttributes(); | ||
57 | + if(attrs == null) { | ||
58 | + continue; | ||
59 | + } | ||
60 | + Node activeTabNode = attrs.getNamedItem(TAG_NAME_ACTIVETAB); | ||
61 | + if(activeTabNode != null) { | ||
62 | + try { | ||
63 | + activeTab = Integer.valueOf(activeTabNode.getNodeValue()); | ||
64 | + }catch (Exception e) { | ||
65 | + continue; | ||
66 | + } | ||
67 | + } | ||
68 | + } | ||
69 | + } | ||
70 | + if(activeTab == null) { | ||
71 | + this.activeTabIndex = 0; | ||
72 | + }else { | ||
73 | + int hiddenSheetNum = 0; | ||
74 | + for(int i=0; i<this.sheetList.size() && i<activeTab.intValue(); ++i) { | ||
75 | + if(this.sheetList.get(i).getState().equals(ATTR_STATE_V_HIDDEN)) { | ||
76 | + ++hiddenSheetNum; | ||
77 | + } | ||
78 | + } | ||
79 | + this.activeTabIndex = hiddenSheetNum + activeTab - 1; | ||
80 | + } | ||
81 | + } | ||
82 | + | ||
83 | + private List<Node> getSheetsDoc(Document workbook) { | ||
84 | + NodeList sheetsNodeList = workbook.getElementsByTagName(TAG_NAME_SHEETS); | ||
85 | + Node sheetsNode = sheetsNodeList.item(0); | ||
86 | + NodeList sheetNodeList = sheetsNode.getChildNodes(); | ||
87 | + List<Node> result = new ArrayList<Node>(); | ||
88 | + for(int i=0; i<sheetNodeList.getLength(); ++i) { | ||
89 | + result.add(sheetNodeList.item(i)); | ||
90 | + } | ||
91 | + return result; | ||
92 | + } | ||
93 | + | ||
94 | + private List<Node> getWorkbookViewDoc(Document workbook) { | ||
95 | + NodeList sheetsNodeList = workbook.getElementsByTagName(TAG_NAME_BOOKVIEWS); | ||
96 | + Node sheetsNode = sheetsNodeList.item(0); | ||
97 | + NodeList sheetNodeList = sheetsNode.getChildNodes(); | ||
98 | + List<Node> result = new ArrayList<Node>(); | ||
99 | + for(int i=0; i<sheetNodeList.getLength(); ++i) { | ||
100 | + result.add(sheetNodeList.item(i)); | ||
101 | + } | ||
102 | + return result; | ||
103 | + } | ||
104 | + | ||
105 | + @Override | ||
106 | + public int getActiveTabIndexInSheetList() { | ||
107 | + return this.activeTabIndex; | ||
108 | + } | ||
109 | + | ||
110 | + @Override | ||
111 | + public List<WorkbookSheet> getSheetList() { | ||
112 | + return sheetList; | ||
113 | + } | ||
114 | + | ||
115 | + @Override | ||
116 | + public boolean isHiddenSheet(int sheetIndex) { | ||
117 | + if(sheetIndex < 0 || sheetIndex >= this.sheetList.size()) { | ||
118 | + return false; | ||
119 | + } | ||
120 | + return this.sheetList.get(sheetIndex).getState().equals(ATTR_STATE_V_HIDDEN); | ||
121 | + } | ||
122 | + | ||
123 | +} |
src/main/java/com/taover/easyexcel/read/builder/ExcelReaderBuilder.java
@@ -231,6 +231,20 @@ public class ExcelReaderBuilder extends AbstractExcelReaderParameterBuilder<Exce | @@ -231,6 +231,20 @@ public class ExcelReaderBuilder extends AbstractExcelReaderParameterBuilder<Exce | ||
231 | * | 231 | * |
232 | * @return | 232 | * @return |
233 | */ | 233 | */ |
234 | + public <T> List<T> doReadSelectedSync() { | ||
235 | + SyncReadListener syncReadListener = new SyncReadListener(); | ||
236 | + registerReadListener(syncReadListener); | ||
237 | + ExcelReader excelReader = build(); | ||
238 | + excelReader.readSelected(); | ||
239 | + excelReader.finish(); | ||
240 | + return (List<T>)syncReadListener.getList(); | ||
241 | + } | ||
242 | + | ||
243 | + /** | ||
244 | + * Synchronous reads return results | ||
245 | + * | ||
246 | + * @return | ||
247 | + */ | ||
234 | public Map<Integer, List<Map<Integer, Object>>> doReadAllSyncForMap() { | 248 | public Map<Integer, List<Map<Integer, Object>>> doReadAllSyncForMap() { |
235 | SyncReadAllSheetToMapListener syncReadListener = new SyncReadAllSheetToMapListener(); | 249 | SyncReadAllSheetToMapListener syncReadListener = new SyncReadAllSheetToMapListener(); |
236 | registerReadListener(syncReadListener); | 250 | registerReadListener(syncReadListener); |
@@ -241,26 +255,18 @@ public class ExcelReaderBuilder extends AbstractExcelReaderParameterBuilder<Exce | @@ -241,26 +255,18 @@ public class ExcelReaderBuilder extends AbstractExcelReaderParameterBuilder<Exce | ||
241 | } | 255 | } |
242 | 256 | ||
243 | public ExcelReaderSheetBuilder sheet() { | 257 | public ExcelReaderSheetBuilder sheet() { |
244 | - return sheet(null, null, true); | 258 | + return sheet(null, null); |
245 | } | 259 | } |
246 | 260 | ||
247 | public ExcelReaderSheetBuilder sheet(Integer sheetNo) { | 261 | public ExcelReaderSheetBuilder sheet(Integer sheetNo) { |
248 | - return sheet(sheetNo, null, null); | 262 | + return sheet(sheetNo, null); |
249 | } | 263 | } |
250 | 264 | ||
251 | public ExcelReaderSheetBuilder sheet(String sheetName) { | 265 | public ExcelReaderSheetBuilder sheet(String sheetName) { |
252 | - return sheet(null, sheetName, null); | 266 | + return sheet(null, sheetName); |
253 | } | 267 | } |
254 | 268 | ||
255 | - public ExcelReaderSheetBuilder sheet(Boolean sheetSelected) { | ||
256 | - return sheet(null, null, sheetSelected); | ||
257 | - } | ||
258 | - | ||
259 | public ExcelReaderSheetBuilder sheet(Integer sheetNo, String sheetName) { | 269 | public ExcelReaderSheetBuilder sheet(Integer sheetNo, String sheetName) { |
260 | - return sheet(sheetNo, sheetName, null); | ||
261 | - } | ||
262 | - | ||
263 | - public ExcelReaderSheetBuilder sheet(Integer sheetNo, String sheetName, Boolean sheetSelected) { | ||
264 | ExcelReaderSheetBuilder excelReaderSheetBuilder = new ExcelReaderSheetBuilder(build()); | 270 | ExcelReaderSheetBuilder excelReaderSheetBuilder = new ExcelReaderSheetBuilder(build()); |
265 | if (sheetNo != null) { | 271 | if (sheetNo != null) { |
266 | excelReaderSheetBuilder.sheetNo(sheetNo); | 272 | excelReaderSheetBuilder.sheetNo(sheetNo); |
@@ -268,9 +274,6 @@ public class ExcelReaderBuilder extends AbstractExcelReaderParameterBuilder<Exce | @@ -268,9 +274,6 @@ public class ExcelReaderBuilder extends AbstractExcelReaderParameterBuilder<Exce | ||
268 | if (sheetName != null) { | 274 | if (sheetName != null) { |
269 | excelReaderSheetBuilder.sheetName(sheetName); | 275 | excelReaderSheetBuilder.sheetName(sheetName); |
270 | } | 276 | } |
271 | - if (sheetSelected != null) { | ||
272 | - excelReaderSheetBuilder.sheetSelected(sheetSelected); | ||
273 | - } | ||
274 | return excelReaderSheetBuilder; | 277 | return excelReaderSheetBuilder; |
275 | } | 278 | } |
276 | 279 |
src/main/java/com/taover/easyexcel/read/builder/ExcelReaderSheetBuilder.java
1 | package com.taover.easyexcel.read.builder; | 1 | package com.taover.easyexcel.read.builder; |
2 | 2 | ||
3 | import java.util.List; | 3 | import java.util.List; |
4 | -import java.util.Map; | ||
5 | 4 | ||
6 | import com.taover.easyexcel.ExcelReader; | 5 | import com.taover.easyexcel.ExcelReader; |
7 | -import com.taover.easyexcel.event.SyncReadAllSheetToMapListener; | ||
8 | import com.taover.easyexcel.event.SyncReadListener; | 6 | import com.taover.easyexcel.event.SyncReadListener; |
9 | import com.taover.easyexcel.exception.ExcelAnalysisException; | 7 | import com.taover.easyexcel.exception.ExcelAnalysisException; |
10 | import com.taover.easyexcel.exception.ExcelGenerateException; | 8 | import com.taover.easyexcel.exception.ExcelGenerateException; |
@@ -52,11 +50,6 @@ public class ExcelReaderSheetBuilder extends AbstractExcelReaderParameterBuilder | @@ -52,11 +50,6 @@ public class ExcelReaderSheetBuilder extends AbstractExcelReaderParameterBuilder | ||
52 | readSheet.setSheetName(sheetName); | 50 | readSheet.setSheetName(sheetName); |
53 | return this; | 51 | return this; |
54 | } | 52 | } |
55 | - | ||
56 | - public ExcelReaderSheetBuilder sheetSelected(Boolean sheetSelected) { | ||
57 | - readSheet.setSheetSelected(sheetSelected); | ||
58 | - return this; | ||
59 | - } | ||
60 | 53 | ||
61 | public ReadSheet build() { | 54 | public ReadSheet build() { |
62 | return readSheet; | 55 | return readSheet; |
src/main/java/com/taover/easyexcel/read/metadata/ReadSheet.java
@@ -18,22 +18,26 @@ public class ReadSheet extends ReadBasicParameter { | @@ -18,22 +18,26 @@ public class ReadSheet extends ReadBasicParameter { | ||
18 | * sheet is selected | 18 | * sheet is selected |
19 | */ | 19 | */ |
20 | private Boolean sheetSelected; | 20 | private Boolean sheetSelected; |
21 | + /** | ||
22 | + * sheet is hidden | ||
23 | + */ | ||
24 | + private Boolean sheetHidden; | ||
21 | 25 | ||
22 | public ReadSheet() {} | 26 | public ReadSheet() {} |
23 | 27 | ||
24 | public ReadSheet(Integer sheetNo) { | 28 | public ReadSheet(Integer sheetNo) { |
25 | - this.sheetNo = sheetNo; | 29 | + this(sheetNo, null, null, null); |
26 | } | 30 | } |
27 | 31 | ||
28 | public ReadSheet(Integer sheetNo, String sheetName) { | 32 | public ReadSheet(Integer sheetNo, String sheetName) { |
29 | - this.sheetNo = sheetNo; | ||
30 | - this.sheetName = sheetName; | 33 | + this(sheetNo, sheetName, null, null); |
31 | } | 34 | } |
32 | - | ||
33 | - public ReadSheet(Integer sheetNo, String sheetName, Boolean sheetSelected) { | 35 | + |
36 | + public ReadSheet(Integer sheetNo, String sheetName, Boolean sheetSelected, Boolean sheetHidden) { | ||
34 | this.sheetNo = sheetNo; | 37 | this.sheetNo = sheetNo; |
35 | this.sheetName = sheetName; | 38 | this.sheetName = sheetName; |
36 | this.sheetSelected = sheetSelected; | 39 | this.sheetSelected = sheetSelected; |
40 | + this.sheetHidden = sheetHidden; | ||
37 | } | 41 | } |
38 | 42 | ||
39 | public Integer getSheetNo() { | 43 | public Integer getSheetNo() { |
@@ -59,6 +63,14 @@ public class ReadSheet extends ReadBasicParameter { | @@ -59,6 +63,14 @@ public class ReadSheet extends ReadBasicParameter { | ||
59 | public void setSheetSelected(Boolean sheetSelected) { | 63 | public void setSheetSelected(Boolean sheetSelected) { |
60 | this.sheetSelected = sheetSelected; | 64 | this.sheetSelected = sheetSelected; |
61 | } | 65 | } |
66 | + | ||
67 | + public Boolean getSheetHidden() { | ||
68 | + return sheetHidden; | ||
69 | + } | ||
70 | + | ||
71 | + public void setSheetHidden(Boolean sheetHidden) { | ||
72 | + this.sheetHidden = sheetHidden; | ||
73 | + } | ||
62 | 74 | ||
63 | public void copyBasicParameter(ReadSheet other) { | 75 | public void copyBasicParameter(ReadSheet other) { |
64 | if (other == null) { | 76 | if (other == null) { |
src/main/java/com/taover/easyexcel/util/SheetUtils.java
@@ -28,10 +28,14 @@ public class SheetUtils { | @@ -28,10 +28,14 @@ public class SheetUtils { | ||
28 | public static ReadSheet match(ReadSheet readSheet, AnalysisContext analysisContext) { | 28 | public static ReadSheet match(ReadSheet readSheet, AnalysisContext analysisContext) { |
29 | ReadWorkbookHolder readWorkbookHolder = analysisContext.readWorkbookHolder(); | 29 | ReadWorkbookHolder readWorkbookHolder = analysisContext.readWorkbookHolder(); |
30 | //read all and not read just selected | 30 | //read all and not read just selected |
31 | - if (readWorkbookHolder.getReadAll() && !readWorkbookHolder.getReadJustSelected()) { | 31 | + if (readWorkbookHolder.getReadAll()) { |
32 | return readSheet; | 32 | return readSheet; |
33 | } | 33 | } |
34 | 34 | ||
35 | + if(readWorkbookHolder.getParameterSheetDataList() == null) { | ||
36 | + return null; | ||
37 | + } | ||
38 | + | ||
35 | //read just selected | 39 | //read just selected |
36 | if(readWorkbookHolder.getReadJustSelected()) { | 40 | if(readWorkbookHolder.getReadJustSelected()) { |
37 | for (ReadSheet parameterReadSheet : readWorkbookHolder.getParameterSheetDataList()) { | 41 | for (ReadSheet parameterReadSheet : readWorkbookHolder.getParameterSheetDataList()) { |
@@ -47,6 +51,7 @@ public class SheetUtils { | @@ -47,6 +51,7 @@ public class SheetUtils { | ||
47 | 51 | ||
48 | //read by sheet no | 52 | //read by sheet no |
49 | for (ReadSheet parameterReadSheet : readWorkbookHolder.getParameterSheetDataList()) { | 53 | for (ReadSheet parameterReadSheet : readWorkbookHolder.getParameterSheetDataList()) { |
54 | + //remove null or hidden sheet | ||
50 | if (parameterReadSheet == null) { | 55 | if (parameterReadSheet == null) { |
51 | continue; | 56 | continue; |
52 | } | 57 | } |
src/test/java/com/taover/easyexcel/test/demo/read/ReadTest.java
@@ -252,12 +252,19 @@ public class ReadTest { | @@ -252,12 +252,19 @@ public class ReadTest { | ||
252 | // } | 252 | // } |
253 | 253 | ||
254 | // 这里 也可以不指定class,返回一个list,然后读取第一个sheet 同步读取会自动finish | 254 | // 这里 也可以不指定class,返回一个list,然后读取第一个sheet 同步读取会自动finish |
255 | - List<Map<Integer, String>> listMap = EasyExcel.read("D://debug//suffixwrong//demo.xls").headRowNumber(0).readHiddenRow(false).sheet(true).doReadSync(); | 255 | + List<Map<Integer, String>> listMap = EasyExcel.read("D://debug//hiddensheet//demo.xls").headRowNumber(0).readHiddenRow(false).doReadSelectedSync(); |
256 | for (Map<Integer, String> data : listMap) { | 256 | for (Map<Integer, String> data : listMap) { |
257 | // 返回每条数据的键值对 表示所在的列 和所在列的值 | 257 | // 返回每条数据的键值对 表示所在的列 和所在列的值 |
258 | LOGGER.info("读取到数据:{}", JSON.toJSONString(data)); | 258 | LOGGER.info("读取到数据:{}", JSON.toJSONString(data)); |
259 | } | 259 | } |
260 | 260 | ||
261 | +// Map<Integer, List<Map<Integer, Object>>> map = EasyExcel.read("D://debug//hiddensheet//九匠牛牛肉干订单.xlsx").headRowNumber(0).readHiddenRow(false).doReadAllSyncForMap(); | ||
262 | +// for (Entry<Integer, List<Map<Integer, Object>>> item: map.entrySet()) { | ||
263 | +// // 返回每条数据的键值对 表示所在的列 和所在列的值 | ||
264 | +// LOGGER.info("读取到数据:{}", item.getKey()); | ||
265 | +// LOGGER.info("读取到数据:{}", JSON.toJSONString(item.getValue())); | ||
266 | +// } | ||
267 | + | ||
261 | // Map<Integer, List<Map<Integer, Object>>> mapListMap = EasyExcel.read(fileName).doReadAllSyncForMap(); | 268 | // Map<Integer, List<Map<Integer, Object>>> mapListMap = EasyExcel.read(fileName).doReadAllSyncForMap(); |
262 | // Map<Integer, List<Map<Integer, Object>>> mapListMap = EasyExcel.read("D://demo.xlsx").doReadAllSyncForMap(); | 269 | // Map<Integer, List<Map<Integer, Object>>> mapListMap = EasyExcel.read("D://demo.xlsx").doReadAllSyncForMap(); |
263 | // for (Entry<Integer, List<Map<Integer, Object>>> item: mapListMap.entrySet()) { | 270 | // for (Entry<Integer, List<Map<Integer, Object>>> item: mapListMap.entrySet()) { |
@@ -273,7 +280,7 @@ public class ReadTest { | @@ -273,7 +280,7 @@ public class ReadTest { | ||
273 | for(String item: sonFileNameArr) { | 280 | for(String item: sonFileNameArr) { |
274 | try { | 281 | try { |
275 | LOGGER.info("======文件名称:"+item+"======"); | 282 | LOGGER.info("======文件名称:"+item+"======"); |
276 | - List<Map<Integer, String>> listMap = EasyExcel.read(dirStr+item).headRowNumber(0).readHiddenRow(false).sheet(true).doReadSync(); | 283 | + List<Map<Integer, String>> listMap = EasyExcel.read(dirStr+item).headRowNumber(0).readHiddenRow(false).doReadSelectedSync(); |
277 | for (Map<Integer, String> data : listMap) { | 284 | for (Map<Integer, String> data : listMap) { |
278 | // 返回每条数据的键值对 表示所在的列 和所在列的值 | 285 | // 返回每条数据的键值对 表示所在的列 和所在列的值 |
279 | LOGGER.info(">{}", JSON.toJSONString(data)); | 286 | LOGGER.info(">{}", JSON.toJSONString(data)); |
@@ -296,6 +303,6 @@ public class ReadTest { | @@ -296,6 +303,6 @@ public class ReadTest { | ||
296 | 303 | ||
297 | public static void main(String args[]) { | 304 | public static void main(String args[]) { |
298 | ReadTest rt = new ReadTest(); | 305 | ReadTest rt = new ReadTest(); |
299 | - rt.readTestSynchronousRead(); | 306 | + rt.synchronousRead(); |
300 | } | 307 | } |
301 | } | 308 | } |