基于EasyExcel导出BigDecimal的数据格式化

3,382 阅读1分钟

1.格式化策略枚举定义

    /**
     * @desc: BigDecimal格式化策略
     * @author: tianpanke
     * @create: 2019-12-12 10:20
     **/
    public enum BigDecimalFormatPolicy {
       ROUND_HALF_UP(1,"四舍五入"),
       ROUND_CUT_TAIL(2,"截尾");
        private Integer value;
        private String text;
        BigDecimalFormatPolicy(Integer value,String text){
            this.value=value;
            this.text=text;
        }
    
        public Integer getValue() {
            return value;
        }}
    

2. 转换器定义

    import java.math.BigDecimal;
    import java.math.RoundingMode;
    import java.text.DecimalFormat;
    
    /**
     * @program: ffc-reconciliation
     * @description: 金额类型字段导出转换器
     * @author: tianpanke
     * @create: 2020-06-12
     **/
    public class BigDecimalOutConvert implements Converter {
    
        private String  pattern="0.00"; //格式化 模式
        private BigDecimalFormatPolicy formatPolicy=BigDecimalFormatPolicy.ROUND_HALF_UP;//默认     四舍五入
    
        public BigDecimalOutConvert(){
        }
        public BigDecimalOutConvert(String pattern, BigDecimalFormatPolicy formatPolicy){
            this.pattern=pattern;
            this.formatPolicy=formatPolicy;
        }
        @Override
        public Class supportJavaTypeKey() {
            return BigDecimal.class;
        }
    
        @Override
        public CellDataTypeEnum supportExcelTypeKey() {
            return CellDataTypeEnum.STRING;
        }
    
        @Override
        public BigDecimal convertToJavaData(CellData cellData, ExcelContentProperty     contentProperty, GlobalConfiguration globalConfiguration) throws Exception {
            return null;
        }
    
        @Override
        public CellData convertToExcelData(BigDecimal value, ExcelContentProperty     contentProperty, GlobalConfiguration globalConfiguration) throws Exception {
            //数据格式化
            RoundingMode roundingMode=(formatPolicy==BigDecimalFormatPolicy.ROUND_HALF_UP)?Roun    dingMode.HALF_UP:RoundingMode.DOWN;
            DecimalFormat decimalFormat=new DecimalFormat(pattern);
            decimalFormat.setRoundingMode(roundingMode);
            String formatResult=decimalFormat.format(value);
            return new CellData<>(formatResult);
        }
    }
    

3.在数据写出时注册格式化器

    excelWriterBuilder.registerConverter(new BigDecimalOutConvert());