Excel注解支持设置BigDecimal精度&舍入规则
This commit is contained in:
		
							parent
							
								
									7de5358dcd
								
							
						
					
					
						commit
						da146c2a70
					
				| 
						 | 
					@ -4,6 +4,7 @@ import java.lang.annotation.ElementType;
 | 
				
			||||||
import java.lang.annotation.Retention;
 | 
					import java.lang.annotation.Retention;
 | 
				
			||||||
import java.lang.annotation.RetentionPolicy;
 | 
					import java.lang.annotation.RetentionPolicy;
 | 
				
			||||||
import java.lang.annotation.Target;
 | 
					import java.lang.annotation.Target;
 | 
				
			||||||
 | 
					import java.math.BigDecimal;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * 自定义导出Excel数据注解
 | 
					 * 自定义导出Excel数据注解
 | 
				
			||||||
| 
						 | 
					@ -30,7 +31,7 @@ public @interface Excel
 | 
				
			||||||
    public String dateFormat() default "";
 | 
					    public String dateFormat() default "";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * 如果是字典类型,请设置字典的type值
 | 
					     * 如果是字典类型,请设置字典的type值 (如: sys_user_sex)
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    public String dictType() default "";
 | 
					    public String dictType() default "";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -44,6 +45,16 @@ public @interface Excel
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    public String separator() default ",";
 | 
					    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字符串)
 | 
					     * 导出类型(0数字 1字符串)
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -8,6 +8,7 @@ import java.io.OutputStream;
 | 
				
			||||||
import java.lang.reflect.Field;
 | 
					import java.lang.reflect.Field;
 | 
				
			||||||
import java.lang.reflect.Method;
 | 
					import java.lang.reflect.Method;
 | 
				
			||||||
import java.math.BigDecimal;
 | 
					import java.math.BigDecimal;
 | 
				
			||||||
 | 
					import java.text.DecimalFormat;
 | 
				
			||||||
import java.util.ArrayList;
 | 
					import java.util.ArrayList;
 | 
				
			||||||
import java.util.Arrays;
 | 
					import java.util.Arrays;
 | 
				
			||||||
import java.util.Comparator;
 | 
					import java.util.Comparator;
 | 
				
			||||||
| 
						 | 
					@ -546,10 +547,14 @@ public class ExcelUtil<T>
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
                    cell.setCellValue(convertByExp(Convert.toStr(value), readConverterExp, separator));
 | 
					                    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));
 | 
					                    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
 | 
					                else
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
                    // 设置列类型
 | 
					                    // 设置列类型
 | 
				
			||||||
| 
						 | 
					@ -896,7 +901,14 @@ public class ExcelUtil<T>
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
                    else
 | 
					                    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)
 | 
					                else if (cell.getCellTypeEnum() == CellType.STRING)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue