修改导出excel时,BigDecimal字段可以导出数字类型

目前只能导出string类型,导致在excel中会有个黄点提示“以文本形式存储的数字”,从而不能运行求和等操作,要批量修改还挺麻烦的。
修改后可以增加`cellType = ColumnType.NUMERIC`后会导出数字类型,会自动获取`scale`的值作为小数点保留值。
This commit is contained in:
nadirvishun 2021-10-05 03:33:50 +00:00 committed by Gitee
parent cbae45c7ce
commit 7780be89fe

View File

@ -837,7 +837,25 @@ public class ExcelUtil<T>
}
else if (value instanceof BigDecimal && -1 != attr.scale())
{
cell.setCellValue((((BigDecimal) value).setScale(attr.scale(), attr.roundingMode())).toString());
String valueStr = (((BigDecimal) value).setScale(attr.scale(), attr.roundingMode())).toString();
//增加如果设置cellType是数值格式则设置自定义小数点的格式
if (Excel.ColumnType.NUMERIC == attr.cellType()) {
//需要新建个样式直接从styles.get("data")会被后续的覆盖掉
CellStyle cellStyle = wb.createCellStyle();
cellStyle.cloneStyleFrom(styles.get("data"));
DataFormat df = wb.createDataFormat();//此处设置数据格式
String precision = "0." + StringUtils.leftPad("", attr.scale(), "0");
cellStyle.setDataFormat(df.getFormat(precision));
cell.setCellStyle(cellStyle);
cell.setCellValue(Double.parseDouble(valueStr));
} else {
//否则还是字符串导出
cell.setCellValue(valueStr);
}
} else {
// 设置列类型
setCellVo(value, attr, cell);
}
}
else if (!attr.handler().equals(ExcelHandlerAdapter.class))
{