Commit 6ed4189bf079b6ab2787c2ca1efbfd030a21c753

Authored by unknown
1 parent c14fb4cc
Exists in master

support hidden sheet

src/main/java/com/taover/easyexcel/analysis/v03/XlsSaxAnalyser.java
1 package com.taover.easyexcel.analysis.v03; 1 package com.taover.easyexcel.analysis.v03;
2 2
3 import java.io.IOException; 3 import java.io.IOException;
4 -import java.util.ArrayList;  
5 import java.util.HashMap; 4 import java.util.HashMap;
6 import java.util.List; 5 import java.util.List;
7 import java.util.Map; 6 import java.util.Map;
@@ -54,9 +53,11 @@ import com.taover.easyexcel.analysis.v03.handlers.NoteRecordHandler; @@ -54,9 +53,11 @@ import com.taover.easyexcel.analysis.v03.handlers.NoteRecordHandler;
54 import com.taover.easyexcel.analysis.v03.handlers.NumberRecordHandler; 53 import com.taover.easyexcel.analysis.v03.handlers.NumberRecordHandler;
55 import com.taover.easyexcel.analysis.v03.handlers.ObjRecordHandler; 54 import com.taover.easyexcel.analysis.v03.handlers.ObjRecordHandler;
56 import com.taover.easyexcel.analysis.v03.handlers.RkRecordHandler; 55 import com.taover.easyexcel.analysis.v03.handlers.RkRecordHandler;
  56 +import com.taover.easyexcel.analysis.v03.handlers.RowRecordHandler;
57 import com.taover.easyexcel.analysis.v03.handlers.SstRecordHandler; 57 import com.taover.easyexcel.analysis.v03.handlers.SstRecordHandler;
58 import com.taover.easyexcel.analysis.v03.handlers.StringRecordHandler; 58 import com.taover.easyexcel.analysis.v03.handlers.StringRecordHandler;
59 import com.taover.easyexcel.analysis.v03.handlers.TextObjectRecordHandler; 59 import com.taover.easyexcel.analysis.v03.handlers.TextObjectRecordHandler;
  60 +import com.taover.easyexcel.analysis.v03.handlers.WindowOneRecordHandler;
60 import com.taover.easyexcel.context.xls.XlsReadContext; 61 import com.taover.easyexcel.context.xls.XlsReadContext;
61 import com.taover.easyexcel.exception.ExcelAnalysisException; 62 import com.taover.easyexcel.exception.ExcelAnalysisException;
62 import com.taover.easyexcel.exception.ExcelAnalysisStopException; 63 import com.taover.easyexcel.exception.ExcelAnalysisStopException;
@@ -83,9 +84,6 @@ public class XlsSaxAnalyser implements HSSFListener, ExcelReadExecutor { @@ -83,9 +84,6 @@ public class XlsSaxAnalyser implements HSSFListener, ExcelReadExecutor {
83 private static final short DUMMY_RECORD_SID = -1; 84 private static final short DUMMY_RECORD_SID = -1;
84 private XlsReadContext xlsReadContext; 85 private XlsReadContext xlsReadContext;
85 private static final Map<Short, XlsRecordHandler> XLS_RECORD_HANDLER_MAP = new HashMap<Short, XlsRecordHandler>(32); 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 static { 88 static {
91 XLS_RECORD_HANDLER_MAP.put(BlankRecord.sid, new BlankRecordHandler()); 89 XLS_RECORD_HANDLER_MAP.put(BlankRecord.sid, new BlankRecordHandler());
@@ -107,6 +105,8 @@ public class XlsSaxAnalyser implements HSSFListener, ExcelReadExecutor { @@ -107,6 +105,8 @@ public class XlsSaxAnalyser implements HSSFListener, ExcelReadExecutor {
107 XLS_RECORD_HANDLER_MAP.put(SSTRecord.sid, new SstRecordHandler()); 105 XLS_RECORD_HANDLER_MAP.put(SSTRecord.sid, new SstRecordHandler());
108 XLS_RECORD_HANDLER_MAP.put(StringRecord.sid, new StringRecordHandler()); 106 XLS_RECORD_HANDLER_MAP.put(StringRecord.sid, new StringRecordHandler());
109 XLS_RECORD_HANDLER_MAP.put(TextObjectRecord.sid, new TextObjectRecordHandler()); 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 public XlsSaxAnalyser(XlsReadContext xlsReadContext) { 112 public XlsSaxAnalyser(XlsReadContext xlsReadContext) {
@@ -139,6 +139,7 @@ public class XlsSaxAnalyser implements HSSFListener, ExcelReadExecutor { @@ -139,6 +139,7 @@ public class XlsSaxAnalyser implements HSSFListener, ExcelReadExecutor {
139 HSSFEventFactory factory = new HSSFEventFactory(); 139 HSSFEventFactory factory = new HSSFEventFactory();
140 HSSFRequest request = new HSSFRequest(); 140 HSSFRequest request = new HSSFRequest();
141 request.addListenerForAllRecords(xlsReadWorkbookHolder.getFormatTrackingHSSFListener()); 141 request.addListenerForAllRecords(xlsReadWorkbookHolder.getFormatTrackingHSSFListener());
  142 +
142 try { 143 try {
143 factory.processWorkbookEvents(request, xlsReadWorkbookHolder.getPoifsFileSystem()); 144 factory.processWorkbookEvents(request, xlsReadWorkbookHolder.getPoifsFileSystem());
144 } catch (IOException e) { 145 } catch (IOException e) {
@@ -148,22 +149,11 @@ public class XlsSaxAnalyser implements HSSFListener, ExcelReadExecutor { @@ -148,22 +149,11 @@ public class XlsSaxAnalyser implements HSSFListener, ExcelReadExecutor {
148 149
149 @Override 150 @Override
150 public void processRecord(Record record) { 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 XlsRecordHandler handler = XLS_RECORD_HANDLER_MAP.get(record.getSid()); 152 XlsRecordHandler handler = XLS_RECORD_HANDLER_MAP.get(record.getSid());
162 if (handler == null) { 153 if (handler == null) {
163 return; 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 if (ignoreRecord) { 157 if (ignoreRecord) {
168 // No need to read the current sheet 158 // No need to read the current sheet
169 return; 159 return;
@@ -173,40 +163,4 @@ public class XlsSaxAnalyser implements HSSFListener, ExcelReadExecutor { @@ -173,40 +163,4 @@ public class XlsSaxAnalyser implements HSSFListener, ExcelReadExecutor {
173 } 163 }
174 handler.processRecord(xlsReadContext, record); 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 package com.taover.easyexcel.analysis.v03.handlers; 1 package com.taover.easyexcel.analysis.v03.handlers;
2 2
  3 +import org.apache.poi.hssf.record.CellRecord;
3 import org.apache.poi.hssf.record.Record; 4 import org.apache.poi.hssf.record.Record;
4 5
5 import com.taover.easyexcel.analysis.v03.XlsRecordHandler; 6 import com.taover.easyexcel.analysis.v03.XlsRecordHandler;
@@ -13,6 +14,23 @@ import com.taover.easyexcel.context.xls.XlsReadContext; @@ -13,6 +14,23 @@ import com.taover.easyexcel.context.xls.XlsReadContext;
13 public abstract class AbstractXlsRecordHandler implements XlsRecordHandler { 14 public abstract class AbstractXlsRecordHandler implements XlsRecordHandler {
14 @Override 15 @Override
15 public boolean support(XlsReadContext xlsReadContext, Record record) { 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,8 +10,10 @@ import org.apache.poi.hssf.record.Record;
10 import com.taover.easyexcel.context.xls.XlsReadContext; 10 import com.taover.easyexcel.context.xls.XlsReadContext;
11 import com.taover.easyexcel.exception.ExcelAnalysisStopException; 11 import com.taover.easyexcel.exception.ExcelAnalysisStopException;
12 import com.taover.easyexcel.read.metadata.ReadSheet; 12 import com.taover.easyexcel.read.metadata.ReadSheet;
  13 +import com.taover.easyexcel.read.metadata.holder.ReadWorkbookHolder;
13 import com.taover.easyexcel.read.metadata.holder.xls.XlsReadWorkbookHolder; 14 import com.taover.easyexcel.read.metadata.holder.xls.XlsReadWorkbookHolder;
14 import com.taover.easyexcel.util.SheetUtils; 15 import com.taover.easyexcel.util.SheetUtils;
  16 +import com.taover.easyexcel.util.StringUtils;
15 17
16 /** 18 /**
17 * Record handler 19 * Record handler
@@ -42,7 +44,7 @@ public class BofRecordHandler extends AbstractXlsRecordHandler { @@ -42,7 +44,7 @@ public class BofRecordHandler extends AbstractXlsRecordHandler {
42 ReadSheet actualReadSheet = xlsReadWorkbookHolder.getActualSheetDataList().get(readSheetIndex); 44 ReadSheet actualReadSheet = xlsReadWorkbookHolder.getActualSheetDataList().get(readSheetIndex);
43 assert actualReadSheet != null : "Can't find the sheet."; 45 assert actualReadSheet != null : "Can't find the sheet.";
44 // Copy the parameter to the current sheet 46 // Copy the parameter to the current sheet
45 - ReadSheet readSheet = SheetUtils.match(actualReadSheet, xlsReadContext); 47 + ReadSheet readSheet = this.filterReadSheet(actualReadSheet, xlsReadContext);
46 if (readSheet != null) { 48 if (readSheet != null) {
47 xlsReadContext.currentSheet(readSheet); 49 xlsReadContext.currentSheet(readSheet);
48 xlsReadContext.xlsReadWorkbookHolder().setIgnoreRecord(Boolean.FALSE); 50 xlsReadContext.xlsReadWorkbookHolder().setIgnoreRecord(Boolean.FALSE);
@@ -53,7 +55,59 @@ public class BofRecordHandler extends AbstractXlsRecordHandler { @@ -53,7 +55,59 @@ public class BofRecordHandler extends AbstractXlsRecordHandler {
53 xlsReadWorkbookHolder.setReadSheetIndex(xlsReadWorkbookHolder.getReadSheetIndex() + 1); 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 if (xlsReadWorkbookHolder.getActualSheetDataList() != null) { 111 if (xlsReadWorkbookHolder.getActualSheetDataList() != null) {
58 return; 112 return;
59 } 113 }
@@ -63,7 +117,13 @@ public class BofRecordHandler extends AbstractXlsRecordHandler { @@ -63,7 +117,13 @@ public class BofRecordHandler extends AbstractXlsRecordHandler {
63 for (int i = 0; i < boundSheetRecords.length; i++) { 117 for (int i = 0; i < boundSheetRecords.length; i++) {
64 BoundSheetRecord boundSheetRecord = boundSheetRecords[i]; 118 BoundSheetRecord boundSheetRecord = boundSheetRecords[i];
65 ReadSheet readSheet = new ReadSheet(i, boundSheetRecord.getSheetname()); 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 xlsReadWorkbookHolder.setActualSheetDataList(readSheetDataList); 128 xlsReadWorkbookHolder.setActualSheetDataList(readSheetDataList);
69 // Just need to get the list of sheets 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 @@ @@ -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 @@ @@ -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,9 +53,9 @@ public class XlsxRowHandler extends DefaultHandler {
53 RowTagHandler rowTagHandler = new RowTagHandler(); 53 RowTagHandler rowTagHandler = new RowTagHandler();
54 XLSX_CELL_HANDLER_MAP.put(ExcelXmlConstants.ROW_TAG, rowTagHandler); 54 XLSX_CELL_HANDLER_MAP.put(ExcelXmlConstants.ROW_TAG, rowTagHandler);
55 XLSX_CELL_HANDLER_MAP.put(ExcelXmlConstants.X_ROW_TAG, rowTagHandler); 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 public XlsxRowHandler(XlsxReadContext xlsxReadContext) { 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,9 +30,14 @@ public class WorkbookAnalyserImpl implements WorkbookAnalyser {
30 public WorkbookAnalyserImpl(InputStream workbookInputStream) throws SAXException, IOException, ParserConfigurationException { 30 public WorkbookAnalyserImpl(InputStream workbookInputStream) throws SAXException, IOException, ParserConfigurationException {
31 Document doc = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(workbookInputStream); 31 Document doc = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(workbookInputStream);
32 NodeList nList = doc.getElementsByTagName(TAG_NAME_WORKBOOK); 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 private void initSheetList(List<Node> sheetsDoc) { 43 private void initSheetList(List<Node> sheetsDoc) {
@@ -81,10 +86,13 @@ public class WorkbookAnalyserImpl implements WorkbookAnalyser { @@ -81,10 +86,13 @@ public class WorkbookAnalyserImpl implements WorkbookAnalyser {
81 } 86 }
82 87
83 private List<Node> getSheetsDoc(Document workbook) { 88 private List<Node> getSheetsDoc(Document workbook) {
  89 + List<Node> result = new ArrayList<Node>();
  90 + if(workbook == null) {
  91 + return result;
  92 + }
84 NodeList sheetsNodeList = workbook.getElementsByTagName(TAG_NAME_SHEETS); 93 NodeList sheetsNodeList = workbook.getElementsByTagName(TAG_NAME_SHEETS);
85 Node sheetsNode = sheetsNodeList.item(0); 94 Node sheetsNode = sheetsNodeList.item(0);
86 - NodeList sheetNodeList = sheetsNode.getChildNodes();  
87 - List<Node> result = new ArrayList<Node>(); 95 + NodeList sheetNodeList = sheetsNode.getChildNodes();
88 for(int i=0; i<sheetNodeList.getLength(); ++i) { 96 for(int i=0; i<sheetNodeList.getLength(); ++i) {
89 result.add(sheetNodeList.item(i)); 97 result.add(sheetNodeList.item(i));
90 } 98 }
@@ -92,10 +100,13 @@ public class WorkbookAnalyserImpl implements WorkbookAnalyser { @@ -92,10 +100,13 @@ public class WorkbookAnalyserImpl implements WorkbookAnalyser {
92 } 100 }
93 101
94 private List<Node> getWorkbookViewDoc(Document workbook) { 102 private List<Node> getWorkbookViewDoc(Document workbook) {
  103 + List<Node> result = new ArrayList<Node>();
  104 + if(workbook == null) {
  105 + return result;
  106 + }
95 NodeList sheetsNodeList = workbook.getElementsByTagName(TAG_NAME_BOOKVIEWS); 107 NodeList sheetsNodeList = workbook.getElementsByTagName(TAG_NAME_BOOKVIEWS);
96 Node sheetsNode = sheetsNodeList.item(0); 108 Node sheetsNode = sheetsNodeList.item(0);
97 - NodeList sheetNodeList = sheetsNode.getChildNodes();  
98 - List<Node> result = new ArrayList<Node>(); 109 + NodeList sheetNodeList = sheetsNode.getChildNodes();
99 for(int i=0; i<sheetNodeList.getLength(); ++i) { 110 for(int i=0; i<sheetNodeList.getLength(); ++i) {
100 result.add(sheetNodeList.item(i)); 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&lt;Exce @@ -217,7 +217,7 @@ public class ExcelReaderBuilder extends AbstractExcelReaderParameterBuilder&lt;Exce
217 * 217 *
218 * @return 218 * @return
219 */ 219 */
220 - public <T> List<T> doReadAllSync() { 220 + public <T> List<T> doReadAllSync() {
221 SyncReadListener syncReadListener = new SyncReadListener(); 221 SyncReadListener syncReadListener = new SyncReadListener();
222 registerReadListener(syncReadListener); 222 registerReadListener(syncReadListener);
223 ExcelReader excelReader = build(); 223 ExcelReader excelReader = build();
src/main/java/com/taover/easyexcel/read/metadata/holder/xls/XlsReadSheetHolder.java
1 package com.taover.easyexcel.read.metadata.holder.xls; 1 package com.taover.easyexcel.read.metadata.holder.xls;
2 2
  3 +import java.util.ArrayList;
3 import java.util.HashMap; 4 import java.util.HashMap;
  5 +import java.util.List;
4 import java.util.Map; 6 import java.util.Map;
5 7
6 import com.taover.easyexcel.enums.RowTypeEnum; 8 import com.taover.easyexcel.enums.RowTypeEnum;
@@ -26,11 +28,14 @@ public class XlsReadSheetHolder extends ReadSheetHolder { @@ -26,11 +28,14 @@ public class XlsReadSheetHolder extends ReadSheetHolder {
26 * Temp object index. 28 * Temp object index.
27 */ 29 */
28 private Map<Integer, String> objectCacheMap; 30 private Map<Integer, String> objectCacheMap;
  31 +
  32 + List<Integer> hiddenRowIndexList;
29 33
30 public XlsReadSheetHolder(ReadSheet readSheet, ReadWorkbookHolder readWorkbookHolder) { 34 public XlsReadSheetHolder(ReadSheet readSheet, ReadWorkbookHolder readWorkbookHolder) {
31 super(readSheet, readWorkbookHolder); 35 super(readSheet, readWorkbookHolder);
32 tempRowType = RowTypeEnum.EMPTY; 36 tempRowType = RowTypeEnum.EMPTY;
33 objectCacheMap = new HashMap<Integer, String>(16); 37 objectCacheMap = new HashMap<Integer, String>(16);
  38 + hiddenRowIndexList = new ArrayList<Integer>(16);
34 } 39 }
35 40
36 public RowTypeEnum getTempRowType() { 41 public RowTypeEnum getTempRowType() {
@@ -57,4 +62,12 @@ public class XlsReadSheetHolder extends ReadSheetHolder { @@ -57,4 +62,12 @@ public class XlsReadSheetHolder extends ReadSheetHolder {
57 public void setObjectCacheMap(Map<Integer, String> objectCacheMap) { 62 public void setObjectCacheMap(Map<Integer, String> objectCacheMap) {
58 this.objectCacheMap = objectCacheMap; 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,6 +46,9 @@ public class XlsReadWorkbookHolder extends ReadWorkbookHolder {
46 * Ignore record. 46 * Ignore record.
47 */ 47 */
48 private Boolean ignoreRecord; 48 private Boolean ignoreRecord;
  49 +
  50 + private int activeSheetIndex = 0;
  51 + private List<Integer> hiddenBoundSheetIndexList = new ArrayList<Integer>();
49 52
50 public XlsReadWorkbookHolder(ReadWorkbook readWorkbook) { 53 public XlsReadWorkbookHolder(ReadWorkbook readWorkbook) {
51 super(readWorkbook); 54 super(readWorkbook);
@@ -113,4 +116,20 @@ public class XlsReadWorkbookHolder extends ReadWorkbookHolder { @@ -113,4 +116,20 @@ public class XlsReadWorkbookHolder extends ReadWorkbookHolder {
113 public void setIgnoreRecord(Boolean ignoreRecord) { 116 public void setIgnoreRecord(Boolean ignoreRecord) {
114 this.ignoreRecord = ignoreRecord; 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,27 +28,10 @@ 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()) { 31 + if (readWorkbookHolder.getReadAll() || readWorkbookHolder.getReadJustSelected()) {
32 return readSheet; 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 //read by sheet no 35 //read by sheet no
53 for (ReadSheet parameterReadSheet : readWorkbookHolder.getParameterSheetDataList()) { 36 for (ReadSheet parameterReadSheet : readWorkbookHolder.getParameterSheetDataList()) {
54 //remove null or hidden sheet 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,7 +252,7 @@ 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//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 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));
@@ -274,17 +274,18 @@ public class ReadTest { @@ -274,17 +274,18 @@ public class ReadTest {
274 } 274 }
275 275
276 public void readTestSynchronousRead() { 276 public void readTestSynchronousRead() {
277 - String dirStr = "D://debug//suffixwrong//"; 277 + String dirStr = "D:\\debug\\readtest\\";
278 File dDir = new File(dirStr); 278 File dDir = new File(dirStr);
279 String[] sonFileNameArr = dDir.list(); 279 String[] sonFileNameArr = dDir.list();
280 for(String item: sonFileNameArr) { 280 for(String item: sonFileNameArr) {
281 try { 281 try {
282 LOGGER.info("======文件名称:"+item+"======"); 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 }catch (Exception e) { 289 }catch (Exception e) {
289 e.printStackTrace(); 290 e.printStackTrace();
290 } 291 }