From d04850c89eeac5b63ed2e7b2921798164539e334 Mon Sep 17 00:00:00 2001 From: Jiaju Zhuang Date: Thu, 22 Dec 2022 19:18:41 +0800 Subject: [PATCH] =?UTF-8?q?*=20=E6=8F=90=E9=AB=98xlsx=E8=AF=BB=E5=8F=96?= =?UTF-8?q?=E5=85=BC=E5=AE=B9=E6=80=A7=EF=BC=9A=E5=9C=A8=E5=AD=98=E5=9C=A8?= =?UTF-8?q?=E7=AC=AC=E4=B8=80=E8=A1=8C=E5=BE=88=E5=A4=9A=E7=A9=BA=E5=88=97?= =?UTF-8?q?=E7=9A=84=E6=83=85=E5=86=B5=E4=B8=8B=EF=BC=8C=E5=BF=BD=E7=95=A5?= =?UTF-8?q?=E7=A9=BA=E5=88=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- .../read/listener/ModelBuildEventListener.java | 12 ++---------- .../read/metadata/holder/ReadSheetHolder.java | 2 +- .../DefaultAnalysisEventProcessor.java | 13 +++++++++++++ .../core/compatibility/CompatibilityTest.java | 10 ++++++++++ .../src/test/resources/compatibility/t03.xlsx | Bin 0 -> 51563 bytes pom.xml | 2 +- update.md | 6 ++++++ 8 files changed, 34 insertions(+), 13 deletions(-) create mode 100644 easyexcel-test/src/test/resources/compatibility/t03.xlsx diff --git a/README.md b/README.md index 292bac65..f4671022 100644 --- a/README.md +++ b/README.md @@ -36,7 +36,7 @@ Java解析、生成Excel比较有名的框架有Apache poi、jxl。但他们都 com.alibaba easyexcel - 3.1.3 + 3.1.4 ``` diff --git a/easyexcel-core/src/main/java/com/alibaba/excel/read/listener/ModelBuildEventListener.java b/easyexcel-core/src/main/java/com/alibaba/excel/read/listener/ModelBuildEventListener.java index 44f77513..a313acb3 100644 --- a/easyexcel-core/src/main/java/com/alibaba/excel/read/listener/ModelBuildEventListener.java +++ b/easyexcel-core/src/main/java/com/alibaba/excel/read/listener/ModelBuildEventListener.java @@ -25,14 +25,6 @@ import org.springframework.cglib.beans.BeanMap; */ public class ModelBuildEventListener implements IgnoreExceptionReadListener>> { - @Override - public void invokeHead(Map> cellDataMap, AnalysisContext context) { - if (context.readSheetHolder().getMaxDataHeadSize() == null - || context.readSheetHolder().getMaxDataHeadSize() < CollectionUtils.size(cellDataMap)) { - context.readSheetHolder().setMaxDataHeadSize(CollectionUtils.size(cellDataMap)); - } - } - @Override public void invoke(Map> cellDataMap, AnalysisContext context) { ReadSheetHolder readSheetHolder = context.readSheetHolder(); @@ -73,8 +65,8 @@ public class ModelBuildEventListener implements IgnoreExceptionReadListener 0) { return readSheetHolder.excelReadHeadProperty().getHeadMap().size(); } - if (readSheetHolder.getMaxDataHeadSize() != null) { - return readSheetHolder.getMaxDataHeadSize(); + if (readSheetHolder.getMaxNotEmptyDataHeadSize() != null) { + return readSheetHolder.getMaxNotEmptyDataHeadSize(); } return 0; } diff --git a/easyexcel-core/src/main/java/com/alibaba/excel/read/metadata/holder/ReadSheetHolder.java b/easyexcel-core/src/main/java/com/alibaba/excel/read/metadata/holder/ReadSheetHolder.java index 197835ad..47957044 100644 --- a/easyexcel-core/src/main/java/com/alibaba/excel/read/metadata/holder/ReadSheetHolder.java +++ b/easyexcel-core/src/main/java/com/alibaba/excel/read/metadata/holder/ReadSheetHolder.java @@ -65,7 +65,7 @@ public class ReadSheetHolder extends AbstractReadHolder { * Read the size of the largest head in sheet head data. * see https://github.com/alibaba/easyexcel/issues/2014 */ - private Integer maxDataHeadSize; + private Integer maxNotEmptyDataHeadSize; public ReadSheetHolder(ReadSheet readSheet, ReadWorkbookHolder readWorkbookHolder) { super(readSheet, readWorkbookHolder); diff --git a/easyexcel-core/src/main/java/com/alibaba/excel/read/processor/DefaultAnalysisEventProcessor.java b/easyexcel-core/src/main/java/com/alibaba/excel/read/processor/DefaultAnalysisEventProcessor.java index 45edb7b7..642e71fb 100644 --- a/easyexcel-core/src/main/java/com/alibaba/excel/read/processor/DefaultAnalysisEventProcessor.java +++ b/easyexcel-core/src/main/java/com/alibaba/excel/read/processor/DefaultAnalysisEventProcessor.java @@ -3,8 +3,11 @@ package com.alibaba.excel.read.processor; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.Map.Entry; +import java.util.stream.Collectors; import com.alibaba.excel.context.AnalysisContext; +import com.alibaba.excel.enums.CellDataTypeEnum; import com.alibaba.excel.enums.HeadKindEnum; import com.alibaba.excel.enums.RowTypeEnum; import com.alibaba.excel.exception.ExcelAnalysisException; @@ -17,6 +20,8 @@ import com.alibaba.excel.read.metadata.property.ExcelReadHeadProperty; import com.alibaba.excel.util.ConverterUtils; import com.alibaba.excel.util.StringUtils; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.collections4.MapUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -111,6 +116,14 @@ public class DefaultAnalysisEventProcessor implements AnalysisEventProcessor { } private void buildHead(AnalysisContext analysisContext, Map> cellDataMap) { + // Rule out empty head, and then take the largest column + if (MapUtils.isNotEmpty(cellDataMap)) { + cellDataMap.entrySet() + .stream() + .filter(entry -> CellDataTypeEnum.EMPTY != entry.getValue().getType()) + .forEach(entry -> analysisContext.readSheetHolder().setMaxNotEmptyDataHeadSize(entry.getKey())); + } + if (!HeadKindEnum.CLASS.equals(analysisContext.currentReadHolder().excelReadHeadProperty().getHeadKind())) { return; } diff --git a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/compatibility/CompatibilityTest.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/compatibility/CompatibilityTest.java index 3844978f..3b0b525a 100644 --- a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/compatibility/CompatibilityTest.java +++ b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/core/compatibility/CompatibilityTest.java @@ -42,4 +42,14 @@ public class CompatibilityTest { Map row2 = list.get(2); Assert.assertEquals("1,2-戊二醇", row2.get(2)); } + + @Test + public void t03() { + // Exist in `sharedStrings.xml` `x:t` start tag, need to be compatible + List> list = EasyExcel.read(TestFileUtil.getPath() + "compatibility/t03.xlsx").sheet().doReadSync(); + log.info("data:{}", JSON.toJSONString(list)); + Assert.assertEquals(1, list.size()); + Map row0 = list.get(0); + Assert.assertEquals(12, row0.size()); + } } diff --git a/easyexcel-test/src/test/resources/compatibility/t03.xlsx b/easyexcel-test/src/test/resources/compatibility/t03.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..3a31ef78ea37ca02b8c5cc34644917c6faf1350d GIT binary patch literal 51563 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 G>;D12qYx4R literal 0 HcmV?d00001 diff --git a/pom.xml b/pom.xml index 96d7f698..eca83ca2 100644 --- a/pom.xml +++ b/pom.xml @@ -20,7 +20,7 @@ - 3.1.3 + 3.1.4 UTF-8 1.8 true diff --git a/update.md b/update.md index bc18ccf1..2c698a0b 100644 --- a/update.md +++ b/update.md @@ -1,3 +1,7 @@ +# 3.1.4 + +* 提高xlsx读取兼容性:在存在第一行很多空列的情况下,忽略空列 + # 3.1.3 * 提高xlsx兼容性:兼容`sharedStrings.xml` 存在 `x:t`标签的情况 @@ -156,7 +160,9 @@ * 发布正式版 * 修复第一行为空不会调用`invokeHeadMap`的bug [Issue #993](https://github.com/alibaba/easyexcel/issues/993) * + 当类的属性没有按照ExcelProperty的属性index顺序排序的时候,写数据出现错乱 [Issue #1046](https://github.com/alibaba/easyexcel/issues/1046) + * 新增支持自定义转换器 入参可以为空 实现`NullableObjectConverter` 即可 [Issue #1084](https://github.com/alibaba/easyexcel/issues/1084) * 修复xls丢失结束标记的情况下 会漏读最后一行