From 5726449ad95f475dae6db926e482b41b8b6dfb45 Mon Sep 17 00:00:00 2001 From: zyd0131 <892991777@qq.com> Date: Sat, 28 May 2022 17:59:19 +0800 Subject: [PATCH] =?UTF-8?q?=E5=9C=A8=E6=9C=80=E6=96=B0=E7=89=88=E6=9C=AC?= =?UTF-8?q?=E7=9A=84=E4=BB=A3=E7=A0=81=E4=B8=AD=E4=BF=AE=E5=A4=8D=E4=BA=86?= =?UTF-8?q?=E8=87=AA=E5=AE=9A=E4=B9=89=E7=9A=84=E6=95=B0=E5=AD=97=E6=A0=BC?= =?UTF-8?q?=E5=BC=8F=E8=AF=BB=E5=8F=96=E7=BB=93=E6=9E=9C=E4=B8=8D=E5=AF=B9?= =?UTF-8?q?=E7=9A=84=E9=97=AE=E9=A2=98=EF=BC=8C=E4=BB=A5=E9=81=BF=E5=85=8D?= =?UTF-8?q?=E4=BA=A7=E7=94=9Fconflict=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../excel/metadata/format/DataFormatter.java | 14 ++++++ .../test/temp/issue2319/Issue2319.java | 15 ++++++ .../test/temp/issue2319/Issue2319Test.java | 44 ++++++++++++++++++ .../test/resources/temp/issue2319/test1.xlsx | Bin 0 -> 9007 bytes .../test/resources/temp/issue2319/test2.xlsx | Bin 0 -> 8970 bytes 5 files changed, 73 insertions(+) create mode 100644 easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/issue2319/Issue2319.java create mode 100644 easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/issue2319/Issue2319Test.java create mode 100644 easyexcel-test/src/test/resources/temp/issue2319/test1.xlsx create mode 100644 easyexcel-test/src/test/resources/temp/issue2319/test2.xlsx diff --git a/easyexcel-core/src/main/java/com/alibaba/excel/metadata/format/DataFormatter.java b/easyexcel-core/src/main/java/com/alibaba/excel/metadata/format/DataFormatter.java index ba8fee47..85b244af 100644 --- a/easyexcel-core/src/main/java/com/alibaba/excel/metadata/format/DataFormatter.java +++ b/easyexcel-core/src/main/java/com/alibaba/excel/metadata/format/DataFormatter.java @@ -512,6 +512,8 @@ public class DataFormatter { private static final Pattern endsWithCommas = Pattern.compile("(,+)$"); private BigDecimal divider; private static final BigDecimal ONE_THOUSAND = new BigDecimal(1000); + //CS304 Issue link: https://github.com/alibaba/easyexcel/issues/2319 + private static final BigDecimal TEN = new BigDecimal(10); private final DecimalFormat df; private static String trimTrailingCommas(String s) { @@ -523,11 +525,23 @@ public class DataFormatter { setExcelStyleRoundingMode(df); Matcher endsWithCommasMatcher = endsWithCommas.matcher(pattern); if (endsWithCommasMatcher.find()) { + + //CS304 Issue link: https://github.com/alibaba/easyexcel/issues/2319 + int index_point = pattern.indexOf("."); + int index_comma = pattern.indexOf(","); + int cnt = index_comma - index_point - 1; + String commas = (endsWithCommasMatcher.group(1)); BigDecimal temp = BigDecimal.ONE; for (int i = 0; i < commas.length(); ++i) { temp = temp.multiply(ONE_THOUSAND); } + + //CS304 Issue link: https://github.com/alibaba/easyexcel/issues/2319 + for (int i = 0; i < cnt ; i++) { + temp = temp.multiply(TEN); + } + divider = temp; } else { divider = null; diff --git a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/issue2319/Issue2319.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/issue2319/Issue2319.java new file mode 100644 index 00000000..f250a75a --- /dev/null +++ b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/issue2319/Issue2319.java @@ -0,0 +1,15 @@ +package com.alibaba.easyexcel.test.temp.issue2319; + +import java.util.Date; + +import lombok.EqualsAndHashCode; +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +@EqualsAndHashCode +public class Issue2319 { + private String num1; + private String num2; +} diff --git a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/issue2319/Issue2319Test.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/issue2319/Issue2319Test.java new file mode 100644 index 00000000..67c49d7f --- /dev/null +++ b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/issue2319/Issue2319Test.java @@ -0,0 +1,44 @@ +package com.alibaba.easyexcel.test.temp.issue2319; + +import java.io.File; +import java.math.BigDecimal; + +import com.alibaba.easyexcel.test.util.TestFileUtil; +import com.alibaba.excel.EasyExcel; +import com.alibaba.excel.metadata.format.DataFormatter; +import com.alibaba.excel.read.listener.PageReadListener; +import com.alibaba.excel.util.NumberDataFormatterUtils; +import com.alibaba.fastjson.JSON; + +import lombok.extern.slf4j.Slf4j; +import org.junit.Ignore; +import org.junit.Test; + +import static org.junit.Assert.assertEquals; + +@Ignore +@Slf4j +public class Issue2319Test { + //CS304 (manually written) Issue link: https://github.com/alibaba/easyexcel/issues/2319 + @Test + public void IssueTest1() { + String fileName = TestFileUtil.getPath() + "temp/issue2319" + File.separator + "test1.xlsx"; + EasyExcel.read(fileName, Issue2319.class, new PageReadListener(dataList -> { + for (Issue2319 issueData : dataList) { + log.info("读取到一条数据{}", JSON.toJSONString(issueData)); + } + })).sheet().doRead(); + } + + //CS304 (manually written) Issue link: https://github.com/alibaba/easyexcel/issues/2319 + @Test + public void IssueTest2() { + String fileName = TestFileUtil.getPath() + "temp/issue2319" + File.separator + "test2.xlsx"; + EasyExcel.read(fileName, Issue2319.class, new PageReadListener(dataList -> { + for (Issue2319 issueData : dataList) { + log.info("读取到一条数据{}", JSON.toJSONString(issueData)); + } + })).sheet().doRead(); + } + +} diff --git a/easyexcel-test/src/test/resources/temp/issue2319/test1.xlsx b/easyexcel-test/src/test/resources/temp/issue2319/test1.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..6c6cc8d7c412b2f6f2798ee809d0fd6fa72e0de4 GIT binary patch literal 9007 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 G`1XG;4t59t literal 0 HcmV?d00001