From 9447449a738fed988753e14f2b2df7bb373b7823 Mon Sep 17 00:00:00 2001 From: RuoYi <yzz_ivy@163.com> Date: 星期三, 19 八月 2020 11:22:33 +0800 Subject: [PATCH] Excel注解支持设置BigDecimal精度&舍入规则 --- src/main/java/com/ruoyi/framework/aspectj/lang/annotation/Excel.java | 13 ++++++++++++- src/main/java/com/ruoyi/common/utils/poi/ExcelUtil.java | 16 ++++++++++++++-- 2 files changed, 26 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/ruoyi/common/utils/poi/ExcelUtil.java b/src/main/java/com/ruoyi/common/utils/poi/ExcelUtil.java index 764c5d7..5527511 100644 --- a/src/main/java/com/ruoyi/common/utils/poi/ExcelUtil.java +++ b/src/main/java/com/ruoyi/common/utils/poi/ExcelUtil.java @@ -8,6 +8,7 @@ import java.lang.reflect.Field; import java.lang.reflect.Method; import java.math.BigDecimal; +import java.text.DecimalFormat; import java.util.ArrayList; import java.util.Arrays; import java.util.Comparator; @@ -546,9 +547,13 @@ { cell.setCellValue(convertByExp(Convert.toStr(value), readConverterExp, separator)); } - else if (StringUtils.isNotEmpty(dictType)) + else if (StringUtils.isNotEmpty(dictType) && StringUtils.isNotNull(value)) { cell.setCellValue(convertDictByExp(Convert.toStr(value), dictType, separator)); + } + else if (value instanceof BigDecimal && -1 != attr.scale()) + { + cell.setCellValue((((BigDecimal) value).setScale(attr.scale(), attr.roundingMode())).toString()); } else { @@ -896,7 +901,14 @@ } else { - val = new BigDecimal(val.toString()); // 娴偣鏍煎紡澶勭悊 + if ((Double) val % 1 > 0) + { + val = new BigDecimal(val.toString()); + } + else + { + val = new DecimalFormat("0").format(val); + } } } else if (cell.getCellTypeEnum() == CellType.STRING) diff --git a/src/main/java/com/ruoyi/framework/aspectj/lang/annotation/Excel.java b/src/main/java/com/ruoyi/framework/aspectj/lang/annotation/Excel.java index fed6f19..2a333ab 100644 --- a/src/main/java/com/ruoyi/framework/aspectj/lang/annotation/Excel.java +++ b/src/main/java/com/ruoyi/framework/aspectj/lang/annotation/Excel.java @@ -4,6 +4,7 @@ import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; +import java.math.BigDecimal; /** * 鑷畾涔夊鍑篍xcel鏁版嵁娉ㄨВ @@ -30,7 +31,7 @@ public String dateFormat() default ""; /** - * 濡傛灉鏄瓧鍏哥被鍨嬶紝璇疯缃瓧鍏哥殑type鍊� + * 濡傛灉鏄瓧鍏哥被鍨嬶紝璇疯缃瓧鍏哥殑type鍊� (濡�: sys_user_sex) */ public String dictType() default ""; @@ -45,6 +46,16 @@ public String separator() default ","; /** + * BigDecimal 绮惧害 榛樿:-1(榛樿涓嶅紑鍚疊igDecimal鏍煎紡鍖�) + */ + public int scale() default -1; + + /** + * BigDecimal 鑸嶅叆瑙勫垯 榛樿:BigDecimal.ROUND_HALF_EVEN + */ + public int roundingMode() default BigDecimal.ROUND_HALF_EVEN; + + /** * 瀵煎嚭绫诲瀷锛�0鏁板瓧 1瀛楃涓诧級 */ public ColumnType cellType() default ColumnType.STRING; -- Gitblit v1.9.3