diff --git a/fastexcel-core/src/main/java/cn/idev/excel/metadata/format/DataFormatter.java b/fastexcel-core/src/main/java/cn/idev/excel/metadata/format/DataFormatter.java index 28c0013..48460cd 100644 --- a/fastexcel-core/src/main/java/cn/idev/excel/metadata/format/DataFormatter.java +++ b/fastexcel-core/src/main/java/cn/idev/excel/metadata/format/DataFormatter.java @@ -118,6 +118,8 @@ public class DataFormatter { */ private static final String invalidDateTimeString; + private static final BigDecimal TEN = new BigDecimal(10); + static { StringBuilder buf = new StringBuilder(); for (int i = 0; i < 255; i++) {buf.append('#');} @@ -524,11 +526,17 @@ public class DataFormatter { setExcelStyleRoundingMode(df); Matcher endsWithCommasMatcher = endsWithCommas.matcher(pattern); if (endsWithCommasMatcher.find()) { + 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); } + for (int i = 0; i < cnt ; i++) { + temp = temp.multiply(TEN); + } divider = temp; } else { divider = null; diff --git a/fastexcel-test/src/test/java/cn/idev/excel/test/temp/issue2319/Issue2319.java b/fastexcel-test/src/test/java/cn/idev/excel/test/temp/issue2319/Issue2319.java new file mode 100644 index 0000000..30f72a2 --- /dev/null +++ b/fastexcel-test/src/test/java/cn/idev/excel/test/temp/issue2319/Issue2319.java @@ -0,0 +1,13 @@ +package cn.idev.excel.test.temp.issue2319; + +import lombok.EqualsAndHashCode; +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +@EqualsAndHashCode +public class Issue2319 { + private String num1; + private String num2; +} \ No newline at end of file diff --git a/fastexcel-test/src/test/java/cn/idev/excel/test/temp/issue2319/Issue2319Test.java b/fastexcel-test/src/test/java/cn/idev/excel/test/temp/issue2319/Issue2319Test.java new file mode 100644 index 0000000..8789b55 --- /dev/null +++ b/fastexcel-test/src/test/java/cn/idev/excel/test/temp/issue2319/Issue2319Test.java @@ -0,0 +1,36 @@ +package cn.idev.excel.test.temp.issue2319; + +import java.io.File; + +import com.alibaba.fastjson2.JSON; + +import cn.idev.excel.EasyExcel; +import cn.idev.excel.FastExcel; +import cn.idev.excel.read.listener.PageReadListener; +import cn.idev.excel.test.util.TestFileUtil; +import lombok.extern.slf4j.Slf4j; +import org.junit.jupiter.api.Test; + +@Slf4j +public class Issue2319Test { + @Test + public void IssueTest1() { + String fileName = TestFileUtil.getPath() + "temp/issue2319" + File.separator + "test1.xlsx"; + FastExcel.read(fileName, Issue2319.class, new PageReadListener(dataList -> { + for (Issue2319 issueData : dataList) { + System.out.println(("读取到一条数据{}" + 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"; + FastExcel.read(fileName, Issue2319.class, new PageReadListener(dataList -> { + for (Issue2319 issueData : dataList) { + System.out.println(("读取到一条数据{}" + JSON.toJSONString(issueData))); + } + })).sheet().doRead(); + } +} diff --git a/fastexcel-test/src/test/resources/temp/issue2319/test1.xlsx b/fastexcel-test/src/test/resources/temp/issue2319/test1.xlsx new file mode 100644 index 0000000..6c6cc8d Binary files /dev/null and b/fastexcel-test/src/test/resources/temp/issue2319/test1.xlsx differ diff --git a/fastexcel-test/src/test/resources/temp/issue2319/test2.xlsx b/fastexcel-test/src/test/resources/temp/issue2319/test2.xlsx new file mode 100644 index 0000000..96a99bd Binary files /dev/null and b/fastexcel-test/src/test/resources/temp/issue2319/test2.xlsx differ diff --git a/update.md b/update.md index 78ffae3..1f9ef4a 100644 --- a/update.md +++ b/update.md @@ -4,6 +4,6 @@ 具体更新内容如下: - 【改进】移除 `itext` 依赖库,将 `转换PDF` 功能迁移至新项目; - 【修复】fill填充空数据,可能导致行数据错乱的问题; -- 【修复】打印CSV文件的 `hashcode`,可能会产生的堆栈溢出问题; +- 【修复】自定义数据格式可能导致数据读取失败的问题; - 【优化】增加报错内容详细信息; - 【优化】更新代码格式和部分错别字。