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中,并不支持模板变量直接运 ...
最新文章
- 持续集成(三):最佳实践
- 【建站系列教程】2、数据源
- encryptjs 加密 前端数据(vue 使用 RSA加密、java 后端 RSA解密)
- C#如何判断质数(转)
- jQuery基础,javascript
- 战术网络安全检查表 | Symantec Connect
- 在mac上安装cgal4.11时,QT5 和qglviewer的设置
- 电脑网络安全_网络安全月 | 戳视频!帮你的电脑远离“黑客”
- JZOJ 4230. 淬炼神体
- servlet到底是什么
- 关闭wps热点及广告弹窗推送
- VS2019下载(离线下载器)
- 采集PMS7003 颗粒度传感器数据,显示在TFT屏幕上,并通过webapi上传(1/2)
- 科普|股东需要对企业债务承担连带责任
- 纪中暑假培训 :Date:7 终章-剑之魂
- 拥挤城市怎么在电脑上玩 拥挤城市电脑版玩法教程
- 某开发机器人公司面试
- MusicPlayerByService
- vue如何在外部js 中 使用this
- 面试官:使用无界队列的线程池会导致内存飙升吗?
热门文章
- 对对号,你属于哪一族?
- 张汉东:如何高效开发 Rust
- 2021年G1工业锅炉司炉考试APP及G1工业锅炉司炉模拟考试软件
- Random和Math.random()
- win10创建新的计算机用户名,win10系统创建新用户名的图文方法
- SIGBUS和SIGSEGV
- AI理论随笔-对称矩阵、正交矩阵与特征向量,特征值(2)
- Image captioning常用的指标
- c语言结束程序符,c语句的结束符是什么
- 【错误笔记】error: expected declaration specifiers or '...' before XXX