EasyExcel自定义Converter解决性别转换问题
上篇文章已经介绍了自定义LocalDateTime转换器解决了LocalDateTime导入导出的问题!
那么这篇文章继续介绍一下性别转换的问题,一般我们代码中都会使用
1/0 分别代表 男/女
,可是Excel中都是用"男","女"表示的,怎么做才能单独将性别转化为1和0
呢?没错还是自定义转换器!
因为这个案例有LocalDateTime,所以请查看上篇文章采取任意一种解决方案,建议采用第二种:
新建User类,然后在类上添加EasyExcel的注解
@Data
@NoArgsConstructor
@AllArgsConstructor
public class User {@ExcelProperty(value = "姓名", index = 0)private String name;@ExcelProperty(value = "年龄", index = 1)private Integer age;// 1 男 0 女@ExcelProperty(value = "性别", index = 2)private Integer sex;@ExcelProperty(value = "创建时间", index = 3)private LocalDateTime createTime;
}
新建Controller用于测试
@Slf4j
@RestController
public class ExcelController {@PostMapping("/importData")public void importData(@RequestParam("file") MultipartFile file) throws IOException {if (file == null) return;ArrayList<Object> list = new ArrayList<>();AnalysisEventListener listener = new AnalysisEventListener() {@Overridepublic void invoke(Object data, AnalysisContext context) {list.add(data);}@Overridepublic void doAfterAllAnalysed(AnalysisContext context) {log.info("导入数据完毕");}};try {EasyExcel.read(file.getInputStream(), User.class, listener).sheet(0).doRead();} catch (IOException e) {log.error("导入出错:{}", e.getMessage());}list.forEach(System.out::println);}@PostMapping("/exportData")public void exportData(HttpServletResponse response) {List<User> list = getList();try {response.setContentType("application/vnd.ms-excel; charset=utf-8");response.setCharacterEncoding("utf-8");String fileName = "三好学生表";response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName, "utf-8") + ".xlsx");EasyExcel.write(response.getOutputStream(), User.class).registerConverter(new LocalDateTimeConverter()).sheet("test").doWrite(list);} catch (Exception e) {log.error("下载报表异常:{}", e.getMessage());throw new RuntimeException("下载报表异常");}}private List<User> getList() {List<User> list = new ArrayList<>();LocalDateTime now = LocalDateTime.now();User xd = new User("熊大", 10, 1, now);User ne = new User("牛二", 20, 0, now);User zs = new User("张三", 30, 1, now);User ls = new User("李四", 40, 1, now);User ww = new User("王五", 50, 0, now);list.add(xd);list.add(ne);list.add(zs);list.add(ls);list.add(ww);return list;}
}
访问exportData接口会发现不是我们想要的结果:为什么导出的文件性别那一列只有0 1 没有男 女呢?好吧!那我们就自定义转换器,因为我们要转换0和1即Integer,所以编写如下转换器!注意要实现的是com.alibaba.excel.converters.Converter
接口,别引用错包了!
public class SexConverter implements Converter<Integer> {@Overridepublic Class supportJavaTypeKey() {return Integer.class;}@Overridepublic CellDataTypeEnum supportExcelTypeKey() {return CellDataTypeEnum.STRING;}@Overridepublic Integer convertToJavaData(CellData cellData, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) throws Exception {return "男".equals(cellData.getStringValue()) ? 1 : 0;}@Overridepublic CellData convertToExcelData(Integer value, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) throws Exception {return new CellData(value.equals(1) ? "男" : "女");}
}
划重点!Sex的converter编写完了,怎么才能让它生效呢?有一种解决方案!
- 找到需要转换的字段,在
@ExcelProperty上添加converter属性
修改代码完毕之后再重启就可以了,不管是导入还是导出都没问题!Excel中的男/女导入之后在代码中会自动变为1/0,代码中的1/0导出之后会自动变为男/女!
赶快试试吧!
细心的小伙伴已经发现了,LocalDateTime的converter有三种生效方案,但是sex的converter只有一种!点击查看Converter使用总结并带你追踪一下源码并给出具体的解决方案!
EasyExcel自定义Converter解决性别转换问题相关推荐
- Java开发日志 - EasyExcel自定义类型转换、Excel表头字段问题
1. EasyExcel自定义数据转换 EasyExcel 是阿里的一个用来读取和写入excel的库, 因为项目需要, 所以我需要从前端上传excel文件, 然后导入到数据库中 1.1 自定义转换类 ...
- blue html中转换,BlueFox Free PDF to HTML Converter(PDF文件转换软件)
BlueFox Free PDF to HTML Converter是一款pdf文件转换软件,能直接查看PDF文件和对PDF文件进行编辑,支持批量进行转换,使用非常方便,操作简单,有需要可以下载. 软 ...
- vmware 解决二进制转换与此平台上的长模式不兼容
https://my.vmware.com/cn/web/vmware/free#desktop_end_user_computing/vmware_workstation_player/12_0 ...
- 人脸性别转换APP有什么?快把这些APP收好
小伙伴们平时在社交媒体上,有没有刷到过网友分享的一些搞笑照片,有些照片是性别反转.有些是换脸变装.有些是时光机,都很有趣.那你们是否也想自己制作一些类似性别反转的照片,但是苦于不知道用什么软件制作呢? ...
- docx批量转换成html,Batch DOCX to HTML Converter(批量docx转换HTML工具)
Batch DOCX to HTML Converter 功能强大,能够将docx文件转换为html格式,支持批量转换,转换的速度很快,操作也很简单,通过软件转换的html网页格式更加方便用户进行网页 ...
- 怎么解决pdf转换成cad格式呢?
在我们工作中,难免需要将PDF文件转换成CAD图纸,这毕竟两种完全不同格式的文件要转换起来,不了解操作方法感觉挺难的.那么如何快速解决pdf转换成cad格式呢? PDF的特点是在任何平台都等同于原稿, ...
- 自定义MyHttpServletRequest解决过滤器拦截@RequestBody整体JSON请求问题
自定义MyHttpServletRequest解决过滤器拦截@RequestBody整体JSON请求问题 参考文章: (1)自定义MyHttpServletRequest解决过滤器拦截@Request ...
- 如何利用CycleGAN实现男女性别转换
介绍 CycleGAN网络具有很强大的风格迁移功能.能够实现非常深层次的风格转换.比如男性图片女性化或者女性图片男性化. 先上效果图: 下面简单谈一谈实现原理. 网络结构 网络结构如图所示,通过两个循 ...
- php自定义函数数学计算,ThinkPHP自定义函数解决模板标签加减运算的方法
本文实例讲述了ThinkPHP自定义函数解决模板标签加减运算的方法.分享给大家供大家参考.具体如下: 实际项目中,我们经常需要标签变量加减运算的操作.但是,在ThinkPHP中,并不支持模板变量直接运 ...
最新文章
- 对于数据库中表示状态或类型字段表示方法的思考
- okhttp连接池_OkHttp配置HTTPS访问+服务器部署
- 又翻出来老电视剧看了看....
- CodeForces 501B——Misha and Changing Handles
- 【文末赠书】牛顿:伸向未知量的利爪
- 57 FI配置-财务会计-固定资产-资产数据传输-定义传输日期和附加参数
- 前端经常遇到的跨域问题几种解决方案
- opengl绘制刻度坐标系_OpenGL中的坐标系-2D
- 百家号在线视频编辑器的技术演进
- 离散数学思维导图笔记
- [配套工具] 【新手福音】最简单的大漠插件注册方法 只需四行代码 每行附有详细说明
- 劳伦斯.拉里.埃里森(甲骨文公司总裁)在耶鲁大学的演讲稿
- HW算法题:判断字符串子序列
- ESP32+DHT11+Arduino连接phpstudy的本地数据库
- 巴菲特致股东的一封信:2003年
- 通过ICursor对Table进行操作(添加、修改、删除)
- 国内顶尖的量化投资团队有哪些?
- Oracle Demo库默认用户/密码为什么叫Scott/Tigger?
- Python金融系列第八篇:Fama-French 多因子模型
- linux系统下,利用appnode和kodexplorer搭建一个私有网盘
热门文章
- 【Android TV 开发】-->Leanback 中 VerticalGridSupportFragment 的使用
- 惠普台式电脑引导不了系统_惠普电脑开机没有USB启动项怎么办
- php strtotime月底,php strtotime 大小月问题
- 复合化计算机,复合式制图中计算机技术的应用方式
- 客户管理信息系统html,一个简易的客户管理信息系统
- Android-Skillful-Craftsman(Android能工巧匠)
- 解决Android中WebView跳转到浏览器的问题
- 什么是 Git? - 探索分布式版本控制工具
- QCon北京2018圆满结束,探索前沿技术最佳实践
- 这一周,全世界都兴奋麻了!