Skip to content

Commit

Permalink
Excel注解支持设置BigDecimal精度&舍入规则
Browse files Browse the repository at this point in the history
  • Loading branch information
yangzongzhuan committed Aug 19, 2020
1 parent 7de5358 commit da146c2
Show file tree
Hide file tree
Showing 2 changed files with 26 additions and 3 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import java.math.BigDecimal;

/**
* 自定义导出Excel数据注解
Expand All @@ -30,7 +31,7 @@
public String dateFormat() default "";

/**
* 如果是字典类型,请设置字典的type值
* 如果是字典类型,请设置字典的type值 (如: sys_user_sex)
*/
public String dictType() default "";

Expand All @@ -44,6 +45,16 @@
*/
public String separator() default ",";

/**
* BigDecimal 精度 默认:-1(默认不开启BigDecimal格式化)
*/
public int scale() default -1;

/**
* BigDecimal 舍入规则 默认:BigDecimal.ROUND_HALF_EVEN
*/
public int roundingMode() default BigDecimal.ROUND_HALF_EVEN;

/**
* 导出类型(0数字 1字符串)
*/
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -546,10 +547,14 @@ else if (StringUtils.isNotEmpty(readConverterExp) && StringUtils.isNotNull(value
{
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
{
// 设置列类型
Expand Down Expand Up @@ -896,7 +901,14 @@ public Object getCellValue(Row row, int column)
}
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)
Expand Down

0 comments on commit da146c2

Please sign in to comment.