Commit 4e9847010b4269afb1265543d5a2031c8eeed8fd

Authored by unknown
1 parent 05ceff0f
Exists in master

1.提交代码

src/main/java/com/taover/easyexcel/analysis/ExcelAnalyserImpl.java
@@ -112,12 +112,17 @@ public class ExcelAnalyserImpl implements ExcelAnalyser { @@ -112,12 +112,17 @@ public class ExcelAnalyserImpl implements ExcelAnalyser {
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); 114 analysisContext.readWorkbookHolder().setReadJustSelected(false);
115 - for(ReadSheet item: readSheetList) {  
116 - if(item.getSheetSelected()) {  
117 - analysisContext.readWorkbookHolder().setReadJustSelected(true);  
118 - break;  
119 - } 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 + }
120 } 124 }
  125 +
121 try { 126 try {
122 excelReadExecutor.execute(); 127 excelReadExecutor.execute();
123 } catch (ExcelAnalysisStopException e) { 128 } catch (ExcelAnalysisStopException e) {
src/main/java/com/taover/easyexcel/analysis/v07/XlsxSaxAnalyser.java
@@ -23,8 +23,11 @@ import org.apache.poi.xssf.usermodel.XSSFRelation; @@ -23,8 +23,11 @@ import org.apache.poi.xssf.usermodel.XSSFRelation;
23 import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTWorkbook; 23 import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTWorkbook;
24 import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTWorkbookPr; 24 import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTWorkbookPr;
25 import org.openxmlformats.schemas.spreadsheetml.x2006.main.WorkbookDocument; 25 import org.openxmlformats.schemas.spreadsheetml.x2006.main.WorkbookDocument;
  26 +import org.slf4j.Logger;
  27 +import org.slf4j.LoggerFactory;
26 import org.xml.sax.ContentHandler; 28 import org.xml.sax.ContentHandler;
27 import org.xml.sax.InputSource; 29 import org.xml.sax.InputSource;
  30 +import org.xml.sax.SAXException;
28 import org.xml.sax.XMLReader; 31 import org.xml.sax.XMLReader;
29 32
30 import com.taover.easyexcel.analysis.ExcelReadExecutor; 33 import com.taover.easyexcel.analysis.ExcelReadExecutor;
@@ -34,6 +37,7 @@ import com.taover.easyexcel.cache.ReadCache; @@ -34,6 +37,7 @@ import com.taover.easyexcel.cache.ReadCache;
34 import com.taover.easyexcel.context.xlsx.XlsxReadContext; 37 import com.taover.easyexcel.context.xlsx.XlsxReadContext;
35 import com.taover.easyexcel.enums.CellExtraTypeEnum; 38 import com.taover.easyexcel.enums.CellExtraTypeEnum;
36 import com.taover.easyexcel.exception.ExcelAnalysisException; 39 import com.taover.easyexcel.exception.ExcelAnalysisException;
  40 +import com.taover.easyexcel.exception.SheetNotSelectedException;
37 import com.taover.easyexcel.metadata.CellExtra; 41 import com.taover.easyexcel.metadata.CellExtra;
38 import com.taover.easyexcel.read.metadata.ReadSheet; 42 import com.taover.easyexcel.read.metadata.ReadSheet;
39 import com.taover.easyexcel.read.metadata.holder.xlsx.XlsxReadWorkbookHolder; 43 import com.taover.easyexcel.read.metadata.holder.xlsx.XlsxReadWorkbookHolder;
@@ -46,7 +50,8 @@ import com.taover.easyexcel.util.StringUtils; @@ -46,7 +50,8 @@ import com.taover.easyexcel.util.StringUtils;
46 * @author jipengfei 50 * @author jipengfei
47 */ 51 */
48 public class XlsxSaxAnalyser implements ExcelReadExecutor { 52 public class XlsxSaxAnalyser implements ExcelReadExecutor {
49 - 53 + private static final Logger LOGGER = LoggerFactory.getLogger(XlsxSaxAnalyser.class);
  54 +
50 private XlsxReadContext xlsxReadContext; 55 private XlsxReadContext xlsxReadContext;
51 private List<ReadSheet> sheetList; 56 private List<ReadSheet> sheetList;
52 private Map<Integer, InputStream> sheetMap; 57 private Map<Integer, InputStream> sheetMap;
@@ -177,6 +182,10 @@ public class XlsxSaxAnalyser implements ExcelReadExecutor { @@ -177,6 +182,10 @@ public class XlsxSaxAnalyser implements ExcelReadExecutor {
177 xmlReader.setContentHandler(handler); 182 xmlReader.setContentHandler(handler);
178 xmlReader.parse(inputSource); 183 xmlReader.parse(inputSource);
179 inputStream.close(); 184 inputStream.close();
  185 + } catch (SAXException e) {
  186 + if(e.getException() instanceof SheetNotSelectedException) {
  187 + LOGGER.warn(e.getMessage());
  188 + }
180 } catch (ExcelAnalysisException e) { 189 } catch (ExcelAnalysisException e) {
181 throw e; 190 throw e;
182 } catch (Exception e) { 191 } catch (Exception e) {
@@ -197,16 +206,12 @@ public class XlsxSaxAnalyser implements ExcelReadExecutor { @@ -197,16 +206,12 @@ public class XlsxSaxAnalyser implements ExcelReadExecutor {
197 for (ReadSheet readSheet : sheetList) { 206 for (ReadSheet readSheet : sheetList) {
198 readSheet = SheetUtils.match(readSheet, xlsxReadContext); 207 readSheet = SheetUtils.match(readSheet, xlsxReadContext);
199 if (readSheet != null) { 208 if (readSheet != null) {
200 - try {  
201 - xlsxReadContext.currentSheet(readSheet);  
202 - parseXmlSource(sheetMap.get(readSheet.getSheetNo()), new XlsxRowHandler(xlsxReadContext));  
203 - // Read comments  
204 - readComments(readSheet);  
205 - // The last sheet is read  
206 - xlsxReadContext.analysisEventProcessor().endSheet(xlsxReadContext);  
207 - }catch (Exception e) {  
208 - e.printStackTrace();  
209 - } 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);
210 } 215 }
211 } 216 }
212 } 217 }
src/main/java/com/taover/easyexcel/analysis/v07/handlers/AbstractXlsxTagHandler.java
1 package com.taover.easyexcel.analysis.v07.handlers; 1 package com.taover.easyexcel.analysis.v07.handlers;
2 2
3 import org.xml.sax.Attributes; 3 import org.xml.sax.Attributes;
  4 +import org.xml.sax.SAXException;
4 5
5 import com.taover.easyexcel.context.xlsx.XlsxReadContext; 6 import com.taover.easyexcel.context.xlsx.XlsxReadContext;
6 7
@@ -31,7 +32,7 @@ public abstract class AbstractXlsxTagHandler implements XlsxTagHandler { @@ -31,7 +32,7 @@ public abstract class AbstractXlsxTagHandler implements XlsxTagHandler {
31 } 32 }
32 33
33 @Override 34 @Override
34 - public void startElement(XlsxReadContext xlsxReadContext, String name, Attributes attributes) { 35 + public void startElement(XlsxReadContext xlsxReadContext, String name, Attributes attributes) throws SAXException {
35 36
36 } 37 }
37 38
src/main/java/com/taover/easyexcel/analysis/v07/handlers/SheetViewHandler.java 0 → 100644
@@ -0,0 +1,29 @@ @@ -0,0 +1,29 @@
  1 +package com.taover.easyexcel.analysis.v07.handlers;
  2 +
  3 +import org.xml.sax.Attributes;
  4 +import org.xml.sax.SAXException;
  5 +
  6 +import com.taover.easyexcel.constant.ExcelXmlConstants;
  7 +import com.taover.easyexcel.context.xlsx.XlsxReadContext;
  8 +import com.taover.easyexcel.exception.SheetNotSelectedException;
  9 +
  10 +/**
  11 + * Cell Handler
  12 + *
  13 + * @author jipengfei
  14 + */
  15 +public class SheetViewHandler extends AbstractXlsxTagHandler {
  16 +
  17 + @Override
  18 + public void startElement(XlsxReadContext xlsxReadContext, String name, Attributes attributes) throws SAXException {
  19 + //whether just read selected sheet
  20 + Boolean readJustSelected = xlsxReadContext.readWorkbookHolder().getReadJustSelected();
  21 + if(ExcelXmlConstants.SHEET_VIEW_TAG.equals(name)
  22 + && readJustSelected != null
  23 + && readJustSelected
  24 + && !"1".equals(attributes.getValue(ExcelXmlConstants.ATTRIBUTE_TAB_SELECTED))) {
  25 + throw new SAXException("not selected sheet, just read selected sheet", new SheetNotSelectedException());
  26 + }
  27 + }
  28 +
  29 +}
src/main/java/com/taover/easyexcel/analysis/v07/handlers/XlsxTagHandler.java
1 package com.taover.easyexcel.analysis.v07.handlers; 1 package com.taover.easyexcel.analysis.v07.handlers;
2 2
3 import org.xml.sax.Attributes; 3 import org.xml.sax.Attributes;
  4 +import org.xml.sax.SAXException;
4 5
5 import com.taover.easyexcel.context.xlsx.XlsxReadContext; 6 import com.taover.easyexcel.context.xlsx.XlsxReadContext;
6 7
@@ -28,8 +29,9 @@ public interface XlsxTagHandler { @@ -28,8 +29,9 @@ public interface XlsxTagHandler {
28 * Tag name 29 * Tag name
29 * @param attributes 30 * @param attributes
30 * Tag attributes 31 * Tag attributes
  32 + * @throws SAXException
31 */ 33 */
32 - void startElement(XlsxReadContext xlsxReadContext, String name, Attributes attributes); 34 + void startElement(XlsxReadContext xlsxReadContext, String name, Attributes attributes) throws SAXException;
33 35
34 /** 36 /**
35 * End handle 37 * End handle
src/main/java/com/taover/easyexcel/analysis/v07/handlers/sax/XlsxRowHandler.java
@@ -3,6 +3,8 @@ package com.taover.easyexcel.analysis.v07.handlers.sax; @@ -3,6 +3,8 @@ 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;
6 import org.xml.sax.Attributes; 8 import org.xml.sax.Attributes;
7 import org.xml.sax.SAXException; 9 import org.xml.sax.SAXException;
8 import org.xml.sax.helpers.DefaultHandler; 10 import org.xml.sax.helpers.DefaultHandler;
@@ -15,6 +17,7 @@ import com.taover.easyexcel.analysis.v07.handlers.CountTagHandler; @@ -15,6 +17,7 @@ import com.taover.easyexcel.analysis.v07.handlers.CountTagHandler;
15 import com.taover.easyexcel.analysis.v07.handlers.HyperlinkTagHandler; 17 import com.taover.easyexcel.analysis.v07.handlers.HyperlinkTagHandler;
16 import com.taover.easyexcel.analysis.v07.handlers.MergeCellTagHandler; 18 import com.taover.easyexcel.analysis.v07.handlers.MergeCellTagHandler;
17 import com.taover.easyexcel.analysis.v07.handlers.RowTagHandler; 19 import com.taover.easyexcel.analysis.v07.handlers.RowTagHandler;
  20 +import com.taover.easyexcel.analysis.v07.handlers.SheetViewHandler;
18 import com.taover.easyexcel.analysis.v07.handlers.XlsxTagHandler; 21 import com.taover.easyexcel.analysis.v07.handlers.XlsxTagHandler;
19 import com.taover.easyexcel.constant.ExcelXmlConstants; 22 import com.taover.easyexcel.constant.ExcelXmlConstants;
20 import com.taover.easyexcel.context.xlsx.XlsxReadContext; 23 import com.taover.easyexcel.context.xlsx.XlsxReadContext;
@@ -23,7 +26,8 @@ import com.taover.easyexcel.context.xlsx.XlsxReadContext; @@ -23,7 +26,8 @@ import com.taover.easyexcel.context.xlsx.XlsxReadContext;
23 * @author jipengfei 26 * @author jipengfei
24 */ 27 */
25 public class XlsxRowHandler extends DefaultHandler { 28 public class XlsxRowHandler extends DefaultHandler {
26 - private static final boolean XLSX_DEBUB_PRINT_INFO = false; 29 + private static final Logger LOGGER = LoggerFactory.getLogger(XlsxRowHandler.class);
  30 + private static final boolean XLSX_DEBUG_PRINT_INFO = false;
27 private XlsxReadContext xlsxReadContext; 31 private XlsxReadContext xlsxReadContext;
28 private static final Map<String, XlsxTagHandler> XLSX_CELL_HANDLER_MAP = new HashMap<String, XlsxTagHandler>(32); 32 private static final Map<String, XlsxTagHandler> XLSX_CELL_HANDLER_MAP = new HashMap<String, XlsxTagHandler>(32);
29 33
@@ -52,6 +56,9 @@ public class XlsxRowHandler extends DefaultHandler { @@ -52,6 +56,9 @@ public class XlsxRowHandler extends DefaultHandler {
52 RowTagHandler rowTagHandler = new RowTagHandler(); 56 RowTagHandler rowTagHandler = new RowTagHandler();
53 XLSX_CELL_HANDLER_MAP.put(ExcelXmlConstants.ROW_TAG, rowTagHandler); 57 XLSX_CELL_HANDLER_MAP.put(ExcelXmlConstants.ROW_TAG, rowTagHandler);
54 XLSX_CELL_HANDLER_MAP.put(ExcelXmlConstants.X_ROW_TAG, rowTagHandler); 58 XLSX_CELL_HANDLER_MAP.put(ExcelXmlConstants.X_ROW_TAG, rowTagHandler);
  59 + SheetViewHandler sheetViewHandler = new SheetViewHandler();
  60 + XLSX_CELL_HANDLER_MAP.put(ExcelXmlConstants.SHEET_VIEW_TAG, sheetViewHandler);
  61 + XLSX_CELL_HANDLER_MAP.put(ExcelXmlConstants.X_SHEET_VIEW_TAG, sheetViewHandler);
55 } 62 }
56 63
57 public XlsxRowHandler(XlsxReadContext xlsxReadContext) { 64 public XlsxRowHandler(XlsxReadContext xlsxReadContext) {
@@ -60,20 +67,10 @@ public class XlsxRowHandler extends DefaultHandler { @@ -60,20 +67,10 @@ public class XlsxRowHandler extends DefaultHandler {
60 67
61 @Override 68 @Override
62 public void startElement(String uri, String localName, String name, Attributes attributes) throws SAXException { 69 public void startElement(String uri, String localName, String name, Attributes attributes) throws SAXException {
63 - if(XLSX_DEBUB_PRINT_INFO) { 70 + if(XLSX_DEBUG_PRINT_INFO) {
64 this.printElement("startElement", uri, localName, name, attributes); 71 this.printElement("startElement", uri, localName, name, attributes);
65 } 72 }
66 73
67 - //whether just read selected sheet  
68 - Boolean readJustSelected = this.xlsxReadContext.readWorkbookHolder().getReadJustSelected();  
69 - if(ExcelXmlConstants.SHEET_VIEW_TAG.equals(name)  
70 - && readJustSelected != null  
71 - && readJustSelected  
72 - && !"1".equals(attributes.getValue("tabSelected"))) {  
73 - //throw new SAXException("not selected sheet, just read selected sheet");  
74 - //return;  
75 - }  
76 -  
77 XlsxTagHandler handler = XLSX_CELL_HANDLER_MAP.get(name); 74 XlsxTagHandler handler = XLSX_CELL_HANDLER_MAP.get(name);
78 if (handler == null 75 if (handler == null
79 || !handler.support(xlsxReadContext) 76 || !handler.support(xlsxReadContext)
@@ -85,22 +82,22 @@ public class XlsxRowHandler extends DefaultHandler { @@ -85,22 +82,22 @@ public class XlsxRowHandler extends DefaultHandler {
85 } 82 }
86 83
87 private void printElement(String title, String uri, String localName, String name, Attributes attributes) { 84 private void printElement(String title, String uri, String localName, String name, Attributes attributes) {
88 - System.out.println("======"+title+"======");  
89 - System.out.println("> uri:"+uri);  
90 - System.out.println("> localName:"+localName);  
91 - System.out.println("> name:"+name); 85 + LOGGER.debug("======"+title+"======");
  86 + LOGGER.debug("> uri:"+uri);
  87 + LOGGER.debug("> localName:"+localName);
  88 + LOGGER.debug("> name:"+name);
92 if(attributes == null) { 89 if(attributes == null) {
93 return; 90 return;
94 } 91 }
95 for(int i=0; i<attributes.getLength(); ++i) { 92 for(int i=0; i<attributes.getLength(); ++i) {
96 - System.out.println(">> attributes["+i+"]->uri:"+attributes.getURI(i)+",qName:"+attributes.getQName(i)+",value:"+attributes.getValue(i)); 93 + LOGGER.debug(">> attributes["+i+"]->uri:"+attributes.getURI(i)+",qName:"+attributes.getQName(i)+",value:"+attributes.getValue(i));
97 } 94 }
98 } 95 }
99 96
100 @Override 97 @Override
101 public void characters(char[] ch, int start, int length) throws SAXException { 98 public void characters(char[] ch, int start, int length) throws SAXException {
102 - if(XLSX_DEBUB_PRINT_INFO) {  
103 - this.printCharacters(ch); 99 + if(XLSX_DEBUG_PRINT_INFO) {
  100 + this.printCharacters(ch, start, length);
104 } 101 }
105 String currentTag = xlsxReadContext.xlsxReadSheetHolder().getTagDeque().peek(); 102 String currentTag = xlsxReadContext.xlsxReadSheetHolder().getTagDeque().peek();
106 if (currentTag == null) { 103 if (currentTag == null) {
@@ -115,14 +112,14 @@ public class XlsxRowHandler extends DefaultHandler { @@ -115,14 +112,14 @@ public class XlsxRowHandler extends DefaultHandler {
115 handler.characters(xlsxReadContext, ch, start, length); 112 handler.characters(xlsxReadContext, ch, start, length);
116 } 113 }
117 114
118 - private void printCharacters(char[] ch) {  
119 - System.out.println(">>>>>>characters>>>>>>");  
120 - System.out.println(new String(ch)); 115 + private void printCharacters(char[] ch, int start, int length) {
  116 + LOGGER.debug(">>>>>>characters>>>>>>");
  117 + LOGGER.debug(new String(ch, start, length));
121 } 118 }
122 119
123 @Override 120 @Override
124 public void endElement(String uri, String localName, String name) throws SAXException { 121 public void endElement(String uri, String localName, String name) throws SAXException {
125 - if(XLSX_DEBUB_PRINT_INFO) { 122 + if(XLSX_DEBUG_PRINT_INFO) {
126 this.printElement("endElement", uri, localName, name, null); 123 this.printElement("endElement", uri, localName, name, null);
127 } 124 }
128 XlsxTagHandler handler = XLSX_CELL_HANDLER_MAP.get(name); 125 XlsxTagHandler handler = XLSX_CELL_HANDLER_MAP.get(name);
src/main/java/com/taover/easyexcel/constant/ExcelXmlConstants.java
@@ -61,4 +61,6 @@ public class ExcelXmlConstants { @@ -61,4 +61,6 @@ public class ExcelXmlConstants {
61 * hidden attribute 61 * hidden attribute
62 */ 62 */
63 public static final String ATTRIBUTE_HIDDEN = "hidden"; 63 public static final String ATTRIBUTE_HIDDEN = "hidden";
  64 +
  65 + public static final String ATTRIBUTE_TAB_SELECTED = "tabSelected";
64 } 66 }
src/main/java/com/taover/easyexcel/exception/SheetNotSelectedException.java 0 → 100644
@@ -0,0 +1,22 @@ @@ -0,0 +1,22 @@
  1 +package com.taover.easyexcel.exception;
  2 +
  3 +/**
  4 + *
  5 + * @author Wang bin
  6 + */
  7 +public class SheetNotSelectedException extends RuntimeException {
  8 +
  9 + public SheetNotSelectedException() {}
  10 +
  11 + public SheetNotSelectedException(String message) {
  12 + super(message);
  13 + }
  14 +
  15 + public SheetNotSelectedException(String message, Throwable cause) {
  16 + super(message, cause);
  17 + }
  18 +
  19 + public SheetNotSelectedException(Throwable cause) {
  20 + super(cause);
  21 + }
  22 +}
src/main/java/com/taover/easyexcel/util/SheetUtils.java
@@ -27,9 +27,25 @@ public class SheetUtils { @@ -27,9 +27,25 @@ public class SheetUtils {
27 */ 27 */
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 - if (readWorkbookHolder.getReadAll() || readWorkbookHolder.getReadJustSelected()) { 30 + //read all and not read just selected
  31 + if (readWorkbookHolder.getReadAll() && !readWorkbookHolder.getReadJustSelected()) {
31 return readSheet; 32 return readSheet;
32 } 33 }
  34 +
  35 + //read just selected
  36 + if(readWorkbookHolder.getReadJustSelected()) {
  37 + for (ReadSheet parameterReadSheet : readWorkbookHolder.getParameterSheetDataList()) {
  38 + if (parameterReadSheet == null) {
  39 + continue;
  40 + }
  41 + if(parameterReadSheet.getSheetSelected() != null && parameterReadSheet.getSheetSelected()) {
  42 + readSheet.copyBasicParameter(parameterReadSheet);
  43 + return readSheet;
  44 + }
  45 + }
  46 + }
  47 +
  48 + //read by sheet no
33 for (ReadSheet parameterReadSheet : readWorkbookHolder.getParameterSheetDataList()) { 49 for (ReadSheet parameterReadSheet : readWorkbookHolder.getParameterSheetDataList()) {
34 if (parameterReadSheet == null) { 50 if (parameterReadSheet == null) {
35 continue; 51 continue;
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").sheet(true).doReadSync(); 256 + List<Map<Integer, String>> listMap = EasyExcel.read("D://demo.xlsx").headRowNumber(0).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));