Commit a96cb09843a0444f48732041ebbac0fa85c0d3a3

Authored by unknown
1 parent a661d13e
Exists in master

1. 增加支持多个sheet 对应map

src/main/java/com/taover/easyexcel/event/SyncReadAllListener.java 0 → 100644
... ... @@ -0,0 +1,37 @@
  1 +package com.taover.easyexcel.event;
  2 +
  3 +import java.util.ArrayList;
  4 +import java.util.HashMap;
  5 +import java.util.List;
  6 +import java.util.Map;
  7 +
  8 +import com.taover.easyexcel.context.AnalysisContext;
  9 +
  10 +/**
  11 + * Synchronous data reading
  12 + *
  13 + * @author wangbin
  14 + */
  15 +public class SyncReadAllListener extends AnalysisEventListener<Map<Integer, Object>> {
  16 + private int currSheetIndex = 0;
  17 + private Map<Integer, List<Map<Integer, Object>>> sheetMap = new HashMap<Integer, List<Map<Integer, Object>>>();
  18 +
  19 + @Override
  20 + public void invoke(Map<Integer, Object> data, AnalysisContext context) {
  21 + List<Map<Integer, Object>> sheetData = sheetMap.get(currSheetIndex);
  22 + if(sheetData == null) {
  23 + sheetData = new ArrayList<Map<Integer, Object>>();
  24 + }
  25 + sheetData.add((Map<Integer, Object>)data);
  26 + this.sheetMap.put(this.currSheetIndex, sheetData);
  27 + }
  28 +
  29 + @Override
  30 + public void doAfterAllAnalysed(AnalysisContext context) {
  31 + ++this.currSheetIndex;
  32 + }
  33 +
  34 + public Map<Integer, List<Map<Integer, Object>>> getSheetMap() {
  35 + return this.sheetMap;
  36 + }
  37 +}
... ...
src/main/java/com/taover/easyexcel/read/builder/ExcelReaderBuilder.java
... ... @@ -4,6 +4,7 @@ import java.io.File;
4 4 import java.io.InputStream;
5 5 import java.util.HashSet;
6 6 import java.util.List;
  7 +import java.util.Map;
7 8  
8 9 import javax.xml.parsers.SAXParserFactory;
9 10  
... ... @@ -13,6 +14,7 @@ import com.taover.easyexcel.cache.selector.ReadCacheSelector;
13 14 import com.taover.easyexcel.context.AnalysisContext;
14 15 import com.taover.easyexcel.enums.CellExtraTypeEnum;
15 16 import com.taover.easyexcel.event.AnalysisEventListener;
  17 +import com.taover.easyexcel.event.SyncReadAllListener;
16 18 import com.taover.easyexcel.event.SyncReadListener;
17 19 import com.taover.easyexcel.read.listener.ModelBuildEventListener;
18 20 import com.taover.easyexcel.read.metadata.ReadWorkbook;
... ... @@ -198,13 +200,13 @@ public class ExcelReaderBuilder extends AbstractExcelReaderParameterBuilder&lt;Exce
198 200 excelReader.readAll();
199 201 excelReader.finish();
200 202 }
201   -
  203 +
202 204 /**
203 205 * Synchronous reads return results
204 206 *
205 207 * @return
206 208 */
207   - public <T> List<T> doReadAllSync() {
  209 + public <T> List<T> doReadAllSync() {
208 210 SyncReadListener syncReadListener = new SyncReadListener();
209 211 registerReadListener(syncReadListener);
210 212 ExcelReader excelReader = build();
... ... @@ -212,6 +214,20 @@ public class ExcelReaderBuilder extends AbstractExcelReaderParameterBuilder&lt;Exce
212 214 excelReader.finish();
213 215 return (List<T>)syncReadListener.getList();
214 216 }
  217 +
  218 + /**
  219 + * Synchronous reads return results
  220 + *
  221 + * @return
  222 + */
  223 + public Map<Integer, List<Map<Integer, Object>>> doReadAllSyncForMap() {
  224 + SyncReadAllListener syncReadListener = new SyncReadAllListener();
  225 + registerReadListener(syncReadListener);
  226 + ExcelReader excelReader = build();
  227 + excelReader.readAll();
  228 + excelReader.finish();
  229 + return (Map<Integer, List<Map<Integer, Object>>>)syncReadListener.getSheetMap();
  230 + }
215 231  
216 232 public ExcelReaderSheetBuilder sheet() {
217 233 return sheet(null, null);
... ...
src/main/java/com/taover/easyexcel/read/builder/ExcelReaderSheetBuilder.java
1 1 package com.taover.easyexcel.read.builder;
2 2  
3 3 import java.util.List;
  4 +import java.util.Map;
4 5  
5 6 import com.taover.easyexcel.ExcelReader;
  7 +import com.taover.easyexcel.event.SyncReadAllListener;
6 8 import com.taover.easyexcel.event.SyncReadListener;
7 9 import com.taover.easyexcel.exception.ExcelAnalysisException;
8 10 import com.taover.easyexcel.exception.ExcelGenerateException;
... ...
src/test/java/com/taover/easyexcel/test/demo/read/ReadTest.java
... ... @@ -3,6 +3,7 @@ package com.taover.easyexcel.test.demo.read;
3 3 import java.io.File;
4 4 import java.util.List;
5 5 import java.util.Map;
  6 +import java.util.Map.Entry;
6 7  
7 8 import org.junit.Ignore;
8 9 import org.junit.Test;
... ... @@ -244,12 +245,12 @@ public class ReadTest {
244 245 */
245 246 @Test
246 247 public void synchronousRead() {
247   - String fileName = TestFileUtil.getPath() + "demo" + File.separator + "demo.xls";
  248 + String fileName = TestFileUtil.getPath() + "demo" + File.separator + "demo.xlsx";
248 249 // 这里 需要指定读用哪个class去读,然后读取第一个sheet 同步读取会自动finish
249   - List<DemoData> list = EasyExcel.read(fileName).head(DemoData.class).sheet().doReadSync();
250   - for (DemoData data : list) {
251   - LOGGER.info("读取到数据:{}", JSON.toJSONString(data));
252   - }
  250 +// List<DemoData> list = EasyExcel.read(fileName).head(DemoData.class).sheet().doReadSync();
  251 +// for (DemoData data : list) {
  252 +// LOGGER.info("读取到数据:{}", JSON.toJSONString(data));
  253 +// }
253 254  
254 255 // 这里 也可以不指定class,返回一个list,然后读取第一个sheet 同步读取会自动finish
255 256 // List<Map<Integer, String>> listMap = EasyExcel.read(fileName).sheet().doReadSync();
... ... @@ -257,6 +258,12 @@ public class ReadTest {
257 258 // // 返回每条数据的键值对 表示所在的列 和所在列的值
258 259 // LOGGER.info("读取到数据:{}", JSON.toJSONString(data));
259 260 // }
  261 +
  262 + Map<Integer, List<Map<Integer, Object>>> mapListMap = EasyExcel.read(fileName).doReadAllSyncForMap();
  263 + for (Entry<Integer, List<Map<Integer, Object>>> item: mapListMap.entrySet()) {
  264 + // 返回每条数据的键值对 表示所在的列 和所在列的值
  265 + LOGGER.info("读取到数据:{}\n{}", JSON.toJSONString(item.getKey()), JSON.toJSONString(item.getValue()));
  266 + }
260 267 }
261 268  
262 269 /**
... ...