[alibaba/easyexcel]2.2.6读取Fraction类型大于2147483647的数字格式化错误

2024-05-17 737 views
2

触发场景描述 easyexcel版本:2.2.6 poi版本(内置): 3.17 单元格格式设为Fraction并且数字大于2147483647(Integer.MAX_VALUE),因为poi内部转为int,得到的结果是2147483647。 比如Excel中显示的是4309401934184,解析得到的结果是2147483647 触发Bug的代码

// com.alibaba.excel.converters.string.StringNumberConverts#convertToJavaData
 // Excel defines formatting
        if (cellData.getDataFormat() != null && !StringUtils.isEmpty(cellData.getDataFormatString())) {
            return NumberDataFormatterUtils.format(cellData.getNumberValue().doubleValue(), cellData.getDataFormat(),
                cellData.getDataFormatString(), globalConfiguration);
        }
//org.apache.poi.ss.usermodel.FractionFormat#format
//this is necessary to prevent overflow in the maxDenom calculation
        if (Double.compare(decPart, 0) == 0){
            StringBuilder sb = new StringBuilder();
            if (isNeg){
                sb.append("-");
            }
// 直接转成了int
            sb.append((int)wholePart);
            return sb.toString();
        }

提示的异常或者没有达到的效果 大于2147483647的Fraction类型单元格读取到的结果是2147483647。

回答

2

我这里接到的没有问题啊,你用Long去接了吗?

3

我这里接到的没有问题啊,你用Long去接了吗?

我用String接收的

5

我这里接到的没有问题啊,你用Long去接了吗?

我用String接收的

明白了,已复现bug。

5

请问有人在处理这个issue吗,我对这个issue感兴趣,我会在最近几个月尝试去修复这个bug。 @zhuangjiaju

8

建议手动升级poi 版本到4+