Browse Source

在最新版本的代码中修复了自定义的数字格式读取结果不对的问题,以避免产生conflict。

pull/2515/head
zyd0131 3 years ago
parent
commit
5726449ad9
  1. 14
      easyexcel-core/src/main/java/com/alibaba/excel/metadata/format/DataFormatter.java
  2. 15
      easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/issue2319/Issue2319.java
  3. 44
      easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/issue2319/Issue2319Test.java
  4. BIN
      easyexcel-test/src/test/resources/temp/issue2319/test1.xlsx
  5. BIN
      easyexcel-test/src/test/resources/temp/issue2319/test2.xlsx

14
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;

15
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;
}

44
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<Issue2319>(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<Issue2319>(dataList -> {
for (Issue2319 issueData : dataList) {
log.info("读取到一条数据{}", JSON.toJSONString(issueData));
}
})).sheet().doRead();
}
}

BIN
easyexcel-test/src/test/resources/temp/issue2319/test1.xlsx

Binary file not shown.

BIN
easyexcel-test/src/test/resources/temp/issue2319/test2.xlsx

Binary file not shown.
Loading…
Cancel
Save