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 @@ @@ -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,6 +4,7 @@ import java.io.File;
4 import java.io.InputStream; 4 import java.io.InputStream;
5 import java.util.HashSet; 5 import java.util.HashSet;
6 import java.util.List; 6 import java.util.List;
  7 +import java.util.Map;
7 8
8 import javax.xml.parsers.SAXParserFactory; 9 import javax.xml.parsers.SAXParserFactory;
9 10
@@ -13,6 +14,7 @@ import com.taover.easyexcel.cache.selector.ReadCacheSelector; @@ -13,6 +14,7 @@ import com.taover.easyexcel.cache.selector.ReadCacheSelector;
13 import com.taover.easyexcel.context.AnalysisContext; 14 import com.taover.easyexcel.context.AnalysisContext;
14 import com.taover.easyexcel.enums.CellExtraTypeEnum; 15 import com.taover.easyexcel.enums.CellExtraTypeEnum;
15 import com.taover.easyexcel.event.AnalysisEventListener; 16 import com.taover.easyexcel.event.AnalysisEventListener;
  17 +import com.taover.easyexcel.event.SyncReadAllListener;
16 import com.taover.easyexcel.event.SyncReadListener; 18 import com.taover.easyexcel.event.SyncReadListener;
17 import com.taover.easyexcel.read.listener.ModelBuildEventListener; 19 import com.taover.easyexcel.read.listener.ModelBuildEventListener;
18 import com.taover.easyexcel.read.metadata.ReadWorkbook; 20 import com.taover.easyexcel.read.metadata.ReadWorkbook;
@@ -198,13 +200,13 @@ public class ExcelReaderBuilder extends AbstractExcelReaderParameterBuilder&lt;Exce @@ -198,13 +200,13 @@ public class ExcelReaderBuilder extends AbstractExcelReaderParameterBuilder&lt;Exce
198 excelReader.readAll(); 200 excelReader.readAll();
199 excelReader.finish(); 201 excelReader.finish();
200 } 202 }
201 - 203 +
202 /** 204 /**
203 * Synchronous reads return results 205 * Synchronous reads return results
204 * 206 *
205 * @return 207 * @return
206 */ 208 */
207 - public <T> List<T> doReadAllSync() { 209 + public <T> List<T> doReadAllSync() {
208 SyncReadListener syncReadListener = new SyncReadListener(); 210 SyncReadListener syncReadListener = new SyncReadListener();
209 registerReadListener(syncReadListener); 211 registerReadListener(syncReadListener);
210 ExcelReader excelReader = build(); 212 ExcelReader excelReader = build();
@@ -212,6 +214,20 @@ public class ExcelReaderBuilder extends AbstractExcelReaderParameterBuilder&lt;Exce @@ -212,6 +214,20 @@ public class ExcelReaderBuilder extends AbstractExcelReaderParameterBuilder&lt;Exce
212 excelReader.finish(); 214 excelReader.finish();
213 return (List<T>)syncReadListener.getList(); 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 public ExcelReaderSheetBuilder sheet() { 232 public ExcelReaderSheetBuilder sheet() {
217 return sheet(null, null); 233 return sheet(null, null);
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;
4 5
5 import com.taover.easyexcel.ExcelReader; 6 import com.taover.easyexcel.ExcelReader;
  7 +import com.taover.easyexcel.event.SyncReadAllListener;
6 import com.taover.easyexcel.event.SyncReadListener; 8 import com.taover.easyexcel.event.SyncReadListener;
7 import com.taover.easyexcel.exception.ExcelAnalysisException; 9 import com.taover.easyexcel.exception.ExcelAnalysisException;
8 import com.taover.easyexcel.exception.ExcelGenerateException; 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,6 +3,7 @@ package com.taover.easyexcel.test.demo.read;
3 import java.io.File; 3 import java.io.File;
4 import java.util.List; 4 import java.util.List;
5 import java.util.Map; 5 import java.util.Map;
  6 +import java.util.Map.Entry;
6 7
7 import org.junit.Ignore; 8 import org.junit.Ignore;
8 import org.junit.Test; 9 import org.junit.Test;
@@ -244,12 +245,12 @@ public class ReadTest { @@ -244,12 +245,12 @@ public class ReadTest {
244 */ 245 */
245 @Test 246 @Test
246 public void synchronousRead() { 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 // 这里 需要指定读用哪个class去读,然后读取第一个sheet 同步读取会自动finish 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 // 这里 也可以不指定class,返回一个list,然后读取第一个sheet 同步读取会自动finish 255 // 这里 也可以不指定class,返回一个list,然后读取第一个sheet 同步读取会自动finish
255 // List<Map<Integer, String>> listMap = EasyExcel.read(fileName).sheet().doReadSync(); 256 // List<Map<Integer, String>> listMap = EasyExcel.read(fileName).sheet().doReadSync();
@@ -257,6 +258,12 @@ public class ReadTest { @@ -257,6 +258,12 @@ public class ReadTest {
257 // // 返回每条数据的键值对 表示所在的列 和所在列的值 258 // // 返回每条数据的键值对 表示所在的列 和所在列的值
258 // LOGGER.info("读取到数据:{}", JSON.toJSONString(data)); 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 /**