当前位置: 首页 > news >正文

easyexcel--导入导出实现自定义格式转换

自定义格式

我们在数据库设计的时候经常会有枚举类型,如0表示普通用户,1表示VIP用户等,这在excel导入的时候,我们会填普通用户而不是0,这样就需要用到自定义格式把普通用户转换成0,我写了一个通用的抽象类,只要继承这个抽象类就能很方便的实现数据转换

定义抽象类

public abstract class EnumStringConverter implements Converter<Integer> {public abstract String getExp();@Overridepublic Class<?> supportJavaTypeKey() {return String.class;}@Overridepublic CellDataTypeEnum supportExcelTypeKey() {return CellDataTypeEnum.STRING;}/*** 这里读的时候会调用** @param context* @return*/@Overridepublic Integer convertToJavaData(ReadConverterContext<?> context) {String exp = getExp();String val = StrUtils.convertByExp(context.getReadCellData().getStringValue(), exp, 1);if (StringUtils.isNotEmpty(val)) return Integer.parseInt(val);return null;}/*** 这里是写的时候会调用 不用管** @return*/@Overridepublic WriteCellData<?> convertToExcelData(WriteConverterContext<Integer> context) {String exp = getExp();if (context.getValue() != null) {String val = StrUtils.convertByExp(String.valueOf(context.getValue()), exp, 0);return new WriteCellData<>(val);}return new WriteCellData<>("");}
}
public class StrUtils {/*** 解析表达式 0:男,1:女,2:未知,根据0返回男或者男返回0** @param propertyValue 参数值* @param converterExp  表达式* @param separator     分隔符,例如逗号* @param assignment    分隔符,例如冒号* @param type          模式,0:根据0找男,1:根据男找0* @return 解析后值*/public static String convertByExp(String propertyValue, String converterExp, String separator, String assignment, int type) {// 根据separator切分成[0:男]String[] convertSource = converterExp.split(separator);for (String item : convertSource) {// 根据assignment切分成[0,男]String[] itemArray = item.split(assignment);if (itemArray.length < 2) throw new ServiceFailException("convertByExp字符串格式错误");if (type == 0) {if (itemArray[0].equals(propertyValue)) {return itemArray[1];}} else {if (itemArray[1].equals(propertyValue)) {return itemArray[0];}}}return "";}public static String convertByExp(String propertyValue, String converterExp, int type) {return convertByExp(propertyValue, converterExp, ",", ":", type);}public static String convertByExp(String propertyValue, String converterExp) {return convertByExp(propertyValue, converterExp, 0);}
}

定义继承类

我们只要按照0:普通用户这个格式提供表达式,转换类就能把0转换成普通用户

public class UserEnumConverter extends EnumStringConverter {@Overridepublic String getExp() {return "0:普通用户,1:VIP用户,2:管理员";}
}

加上自定义格式注解

    @ExcelProperty(value = "类型", converter = UserEnumConverter.class)private Integer type;

效果

数据库存储

导出样式,把0转成普通用户了

导入效果,把普通用户转成0了,导入导出都实现了完美转换

 excel单元格设置成下拉

我们在导入的时候,类型这一列不是自由文本,只能输入固定的几个值,这个该如何实现?

先选中类型那一列,然后数据-数据验证,点击数据验证

出来弹框后,选择序列,来源里面填普通用户,VIP用户,管理员,注意是英文逗号分隔

 这样单元格会出现下拉框,用户可以直接选择,这样就不会填错了

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 基于树莓派的智能AI网关接入豆包流程:HTTP/HTTPS、MQTT、Flask、Web可视化(代码示例)
  • 【Linux修行路】文件系统之缓冲区
  • 深度解析敏捷架构在数字时代的应用:创新理论与实践的融合
  • 石油采集行业应用解决方案
  • CSP 2023 普及组第一轮 - CSP/S 2023初试题 完善程序第二题解析
  • 如何为您的专用IP地址选择正确的IP SSL证书
  • java项目部署到linux
  • MySQL 多表连接(JOIN)
  • Leetcode-552 学生出勤记录II
  • 如何在 KubeBlocks 中配置实例模板?
  • Spring之@Bean注解
  • MySQL 如何保证事务的原子性
  • 考完PMP最好的出路!是做项目管理培训讲师!
  • Unity转Unreal5从入门到精通之UMG的使用
  • 网安新声 | 从微软“狂躁许可”漏洞事件看安全新挑战与应对策略
  • JS中 map, filter, some, every, forEach, for in, for of 用法总结
  • [LeetCode] Wiggle Sort
  • 《Javascript高级程序设计 (第三版)》第五章 引用类型
  • Akka系列(七):Actor持久化之Akka persistence
  • echarts花样作死的坑
  • ERLANG 网工修炼笔记 ---- UDP
  • Java编程基础24——递归练习
  • seaborn 安装成功 + ImportError: DLL load failed: 找不到指定的模块 问题解决
  • vue--为什么data属性必须是一个函数
  • 从重复到重用
  • 给自己的博客网站加上酷炫的初音未来音乐游戏?
  • 机器人定位导航技术 激光SLAM与视觉SLAM谁更胜一筹?
  • 技术胖1-4季视频复习— (看视频笔记)
  • 讲清楚之javascript作用域
  • 老板让我十分钟上手nx-admin
  • 那些年我们用过的显示性能指标
  • 全栈开发——Linux
  • 如何使用 OAuth 2.0 将 LinkedIn 集成入 iOS 应用
  • 深度学习中的信息论知识详解
  • 使用SAX解析XML
  • 文本多行溢出显示...之最后一行不到行尾的解决
  • 翻译 | The Principles of OOD 面向对象设计原则
  • 如何通过报表单元格右键控制报表跳转到不同链接地址 ...
  • ​Z时代时尚SUV新宠:起亚赛图斯值不值得年轻人买?
  • !!【OpenCV学习】计算两幅图像的重叠区域
  • #QT(串口助手-界面)
  • (10)STL算法之搜索(二) 二分查找
  • (11)工业界推荐系统-小红书推荐场景及内部实践【粗排三塔模型】
  • (2)关于RabbitMq 的 Topic Exchange 主题交换机
  • (33)STM32——485实验笔记
  • (4)(4.6) Triducer
  • (function(){})()的分步解析
  • (第一天)包装对象、作用域、创建对象
  • (二十一)devops持续集成开发——使用jenkins的Docker Pipeline插件完成docker项目的pipeline流水线发布
  • (附源码)小程序儿童艺术培训机构教育管理小程序 毕业设计 201740
  • (生成器)yield与(迭代器)generator
  • (学习总结16)C++模版2
  • (原)记一次CentOS7 磁盘空间大小异常的解决过程
  • (轉貼)《OOD启思录》:61条面向对象设计的经验原则 (OO)
  • .bat批处理(十):从路径字符串中截取盘符、文件名、后缀名等信息