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。