上篇文章已经介绍了自定义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编写完了,怎么才能让它生效呢?有一种解决方案!

  1. 找到需要转换的字段,在@ExcelProperty上添加converter属性

修改代码完毕之后再重启就可以了,不管是导入还是导出都没问题!Excel中的男/女导入之后在代码中会自动变为1/0,代码中的1/0导出之后会自动变为男/女!赶快试试吧!

细心的小伙伴已经发现了,LocalDateTime的converter有三种生效方案,但是sex的converter只有一种!点击查看Converter使用总结并带你追踪一下源码并给出具体的解决方案!

加油!

EasyExcel自定义Converter解决性别转换问题相关推荐

  1. Java开发日志 - EasyExcel自定义类型转换、Excel表头字段问题

    1. EasyExcel自定义数据转换 EasyExcel 是阿里的一个用来读取和写入excel的库, 因为项目需要, 所以我需要从前端上传excel文件, 然后导入到数据库中 1.1 自定义转换类 ...

  2. blue html中转换,BlueFox Free PDF to HTML Converter(PDF文件转换软件)

    BlueFox Free PDF to HTML Converter是一款pdf文件转换软件,能直接查看PDF文件和对PDF文件进行编辑,支持批量进行转换,使用非常方便,操作简单,有需要可以下载. 软 ...

  3. vmware 解决二进制转换与此平台上的长模式不兼容

    https://my.vmware.com/cn/web/vmware/free#desktop_end_user_computing/vmware_workstation_player/12_0   ...

  4. 人脸性别转换APP有什么?快把这些APP收好

    小伙伴们平时在社交媒体上,有没有刷到过网友分享的一些搞笑照片,有些照片是性别反转.有些是换脸变装.有些是时光机,都很有趣.那你们是否也想自己制作一些类似性别反转的照片,但是苦于不知道用什么软件制作呢? ...

  5. docx批量转换成html,Batch DOCX to HTML Converter(批量docx转换HTML工具)

    Batch DOCX to HTML Converter 功能强大,能够将docx文件转换为html格式,支持批量转换,转换的速度很快,操作也很简单,通过软件转换的html网页格式更加方便用户进行网页 ...

  6. 怎么解决pdf转换成cad格式呢?

    在我们工作中,难免需要将PDF文件转换成CAD图纸,这毕竟两种完全不同格式的文件要转换起来,不了解操作方法感觉挺难的.那么如何快速解决pdf转换成cad格式呢? PDF的特点是在任何平台都等同于原稿, ...

  7. 自定义MyHttpServletRequest解决过滤器拦截@RequestBody整体JSON请求问题

    自定义MyHttpServletRequest解决过滤器拦截@RequestBody整体JSON请求问题 参考文章: (1)自定义MyHttpServletRequest解决过滤器拦截@Request ...

  8. 如何利用CycleGAN实现男女性别转换

    介绍 CycleGAN网络具有很强大的风格迁移功能.能够实现非常深层次的风格转换.比如男性图片女性化或者女性图片男性化. 先上效果图: 下面简单谈一谈实现原理. 网络结构 网络结构如图所示,通过两个循 ...

  9. php自定义函数数学计算,ThinkPHP自定义函数解决模板标签加减运算的方法

    本文实例讲述了ThinkPHP自定义函数解决模板标签加减运算的方法.分享给大家供大家参考.具体如下: 实际项目中,我们经常需要标签变量加减运算的操作.但是,在ThinkPHP中,并不支持模板变量直接运 ...

最新文章

  1. 持续集成(三):最佳实践
  2. 【建站系列教程】2、数据源
  3. encryptjs 加密 前端数据(vue 使用 RSA加密、java 后端 RSA解密)
  4. C#如何判断质数(转)
  5. jQuery基础,javascript
  6. 战术网络安全检查表 | Symantec Connect
  7. 在mac上安装cgal4.11时,QT5 和qglviewer的设置
  8. 电脑网络安全_网络安全月 | 戳视频!帮你的电脑远离“黑客”
  9. JZOJ 4230. 淬炼神体
  10. servlet到底是什么
  11. 关闭wps热点及广告弹窗推送
  12. VS2019下载(离线下载器)
  13. 采集PMS7003 颗粒度传感器数据,显示在TFT屏幕上,并通过webapi上传(1/2)
  14. 科普|股东需要对企业债务承担连带责任
  15. 纪中暑假培训 :Date:7 终章-剑之魂
  16. 拥挤城市怎么在电脑上玩 拥挤城市电脑版玩法教程
  17. 某开发机器人公司面试
  18. MusicPlayerByService
  19. vue如何在外部js 中 使用this
  20. 面试官:使用无界队列的线程池会导致内存飙升吗?

热门文章

  1. 对对号,你属于哪一族?
  2. 张汉东:如何高效开发 Rust
  3. 2021年G1工业锅炉司炉考试APP及G1工业锅炉司炉模拟考试软件
  4. Random和Math.random()
  5. win10创建新的计算机用户名,win10系统创建新用户名的图文方法
  6. SIGBUS和SIGSEGV
  7. AI理论随笔-对称矩阵、正交矩阵与特征向量,特征值(2)
  8. Image captioning常用的指标
  9. c语言结束程序符,c语句的结束符是什么
  10. 【错误笔记】error: expected declaration specifiers or '...' before XXX