From a96cb09843a0444f48732041ebbac0fa85c0d3a3 Mon Sep 17 00:00:00 2001 From: unknown Date: Wed, 1 Jul 2020 18:17:48 +0800 Subject: [PATCH] 1. 增加支持多个sheet 对应map --- src/main/java/com/taover/easyexcel/event/SyncReadAllListener.java | 37 +++++++++++++++++++++++++++++++++++++ src/main/java/com/taover/easyexcel/read/builder/ExcelReaderBuilder.java | 20 ++++++++++++++++++-- src/main/java/com/taover/easyexcel/read/builder/ExcelReaderSheetBuilder.java | 2 ++ src/test/java/com/taover/easyexcel/test/demo/read/ReadTest.java | 17 ++++++++++++----- 4 files changed, 69 insertions(+), 7 deletions(-) create mode 100644 src/main/java/com/taover/easyexcel/event/SyncReadAllListener.java diff --git a/src/main/java/com/taover/easyexcel/event/SyncReadAllListener.java b/src/main/java/com/taover/easyexcel/event/SyncReadAllListener.java new file mode 100644 index 0000000..49f9fba --- /dev/null +++ b/src/main/java/com/taover/easyexcel/event/SyncReadAllListener.java @@ -0,0 +1,37 @@ +package com.taover.easyexcel.event; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import com.taover.easyexcel.context.AnalysisContext; + +/** + * Synchronous data reading + * + * @author wangbin + */ +public class SyncReadAllListener extends AnalysisEventListener> { + private int currSheetIndex = 0; + private Map>> sheetMap = new HashMap>>(); + + @Override + public void invoke(Map data, AnalysisContext context) { + List> sheetData = sheetMap.get(currSheetIndex); + if(sheetData == null) { + sheetData = new ArrayList>(); + } + sheetData.add((Map)data); + this.sheetMap.put(this.currSheetIndex, sheetData); + } + + @Override + public void doAfterAllAnalysed(AnalysisContext context) { + ++this.currSheetIndex; + } + + public Map>> getSheetMap() { + return this.sheetMap; + } +} diff --git a/src/main/java/com/taover/easyexcel/read/builder/ExcelReaderBuilder.java b/src/main/java/com/taover/easyexcel/read/builder/ExcelReaderBuilder.java index 176863d..a37bc38 100644 --- a/src/main/java/com/taover/easyexcel/read/builder/ExcelReaderBuilder.java +++ b/src/main/java/com/taover/easyexcel/read/builder/ExcelReaderBuilder.java @@ -4,6 +4,7 @@ import java.io.File; import java.io.InputStream; import java.util.HashSet; import java.util.List; +import java.util.Map; import javax.xml.parsers.SAXParserFactory; @@ -13,6 +14,7 @@ import com.taover.easyexcel.cache.selector.ReadCacheSelector; import com.taover.easyexcel.context.AnalysisContext; import com.taover.easyexcel.enums.CellExtraTypeEnum; import com.taover.easyexcel.event.AnalysisEventListener; +import com.taover.easyexcel.event.SyncReadAllListener; import com.taover.easyexcel.event.SyncReadListener; import com.taover.easyexcel.read.listener.ModelBuildEventListener; import com.taover.easyexcel.read.metadata.ReadWorkbook; @@ -198,13 +200,13 @@ public class ExcelReaderBuilder extends AbstractExcelReaderParameterBuilder List doReadAllSync() { + public List doReadAllSync() { SyncReadListener syncReadListener = new SyncReadListener(); registerReadListener(syncReadListener); ExcelReader excelReader = build(); @@ -212,6 +214,20 @@ public class ExcelReaderBuilder extends AbstractExcelReaderParameterBuilder)syncReadListener.getList(); } + + /** + * Synchronous reads return results + * + * @return + */ + public Map>> doReadAllSyncForMap() { + SyncReadAllListener syncReadListener = new SyncReadAllListener(); + registerReadListener(syncReadListener); + ExcelReader excelReader = build(); + excelReader.readAll(); + excelReader.finish(); + return (Map>>)syncReadListener.getSheetMap(); + } public ExcelReaderSheetBuilder sheet() { return sheet(null, null); diff --git a/src/main/java/com/taover/easyexcel/read/builder/ExcelReaderSheetBuilder.java b/src/main/java/com/taover/easyexcel/read/builder/ExcelReaderSheetBuilder.java index 8aa8dc2..f50ddbd 100644 --- a/src/main/java/com/taover/easyexcel/read/builder/ExcelReaderSheetBuilder.java +++ b/src/main/java/com/taover/easyexcel/read/builder/ExcelReaderSheetBuilder.java @@ -1,8 +1,10 @@ package com.taover.easyexcel.read.builder; import java.util.List; +import java.util.Map; import com.taover.easyexcel.ExcelReader; +import com.taover.easyexcel.event.SyncReadAllListener; import com.taover.easyexcel.event.SyncReadListener; import com.taover.easyexcel.exception.ExcelAnalysisException; import com.taover.easyexcel.exception.ExcelGenerateException; diff --git a/src/test/java/com/taover/easyexcel/test/demo/read/ReadTest.java b/src/test/java/com/taover/easyexcel/test/demo/read/ReadTest.java index 43ddd56..585558a 100644 --- a/src/test/java/com/taover/easyexcel/test/demo/read/ReadTest.java +++ b/src/test/java/com/taover/easyexcel/test/demo/read/ReadTest.java @@ -3,6 +3,7 @@ package com.taover.easyexcel.test.demo.read; import java.io.File; import java.util.List; import java.util.Map; +import java.util.Map.Entry; import org.junit.Ignore; import org.junit.Test; @@ -244,12 +245,12 @@ public class ReadTest { */ @Test public void synchronousRead() { - String fileName = TestFileUtil.getPath() + "demo" + File.separator + "demo.xls"; + String fileName = TestFileUtil.getPath() + "demo" + File.separator + "demo.xlsx"; // 这里 需要指定读用哪个class去读,然后读取第一个sheet 同步读取会自动finish - List list = EasyExcel.read(fileName).head(DemoData.class).sheet().doReadSync(); - for (DemoData data : list) { - LOGGER.info("读取到数据:{}", JSON.toJSONString(data)); - } +// List list = EasyExcel.read(fileName).head(DemoData.class).sheet().doReadSync(); +// for (DemoData data : list) { +// LOGGER.info("读取到数据:{}", JSON.toJSONString(data)); +// } // 这里 也可以不指定class,返回一个list,然后读取第一个sheet 同步读取会自动finish // List> listMap = EasyExcel.read(fileName).sheet().doReadSync(); @@ -257,6 +258,12 @@ public class ReadTest { // // 返回每条数据的键值对 表示所在的列 和所在列的值 // LOGGER.info("读取到数据:{}", JSON.toJSONString(data)); // } + + Map>> mapListMap = EasyExcel.read(fileName).doReadAllSyncForMap(); + for (Entry>> item: mapListMap.entrySet()) { + // 返回每条数据的键值对 表示所在的列 和所在列的值 + LOGGER.info("读取到数据:{}\n{}", JSON.toJSONString(item.getKey()), JSON.toJSONString(item.getValue())); + } } /** -- libgit2 0.21.2