zoukankan      html  css  js  c++  java
  • easyexcel导出字典值的映射转换

    主要是通过指定converter来实现

     具体converter代码如下

    /**
     * easyexcel关于导出的字典值转换
     */
    public class ExcelDictConverter implements Converter<Integer> {
    
        private String[] dictCodIsYesNoArr ={"afterSalesStatus", ""};
    
    
        @Override
        public Class supportJavaTypeKey() {
            return Integer.class;
        }
    
        @Override
        public CellDataTypeEnum supportExcelTypeKey() {
            return CellDataTypeEnum.STRING;
        }
    
        @Override
        public Integer convertToJavaData(CellData cellData, ExcelContentProperty excelContentProperty, GlobalConfiguration globalConfiguration) throws Exception {
            return null;
        }
    
        @Override
        public CellData convertToExcelData(Integer dictKey, ExcelContentProperty excelContentProperty, GlobalConfiguration globalConfiguration) throws Exception {
            // 类里需要转换的字段
            Field field = excelContentProperty.getField();
            String fieldName = field.getName();
            String excelValue;
            // 字典值为yes_no的字段
            if (StringUtils.equalsAnyIgnoreCase(fieldName, dictCodIsYesNoArr)) {
                excelValue = DictCache.getValue(DictEnum.YES_NO, dictKey);
            }else {
                // 将字段名转换成下划线连接(也就是字典表里的code
                String dictCode = camelToUnderline(fieldName);
                // 当前字段对应的字典值
                excelValue = DictCache.getValue(dictCode, dictKey);
            }
            return new CellData(StringUtil.isBlank(excelValue) ? dictKey.toString() : excelValue);
        }
    
        /**
         *         驼峰转成下划线
         *
         * @param sourStr 需要转换的字符串,如:orderStatus
         * @return 转换后的字符串,如:order_status
         */
        public String camelToUnderline(String sourStr) {
            if (sourStr == null || "".equals(sourStr.trim())) {
                return "";
            }
            int len = sourStr.length();
            StringBuilder sb = new StringBuilder(len);
            for (int i = 0; i < len; i++) {
                char c = sourStr.charAt(i);
                if (Character.isUpperCase(c)) {
                    sb.append('_');
                }
                sb.append(Character.toLowerCase(c));
            }
            return sb.toString();
        }
    
    }
    心里有束光,眼里有片海
  • 相关阅读:
    模块移植-加宏选择性编译
    模块-各个模块的路径所在
    ubuntu-系统卡慢解决(转载)
    meld文件的脚本
    artTemplate模板引擎
    前端完全分离和前端不完全分离
    px em rem的区别
    原型和原型链
    阻止默认事件
    document.ready和onload的区别
  • 原文地址:https://www.cnblogs.com/xhy-shine/p/14513163.html
Copyright © 2011-2022 走看看