参考:Can not find ‘Converter‘ support class List问题解决
EasyExcel 自定义类型转换器Converter3种加载方式(转换字段加载类型转换器、导出时加载类型转换器、加载全局类型转换器)
EasyExcel 自定义LocalDate类型转换器Converter

问题描述

com.alibaba.excel.exception.ExcelDataConvertException: Can not find ‘Converter’ support class List.
com.alibaba.excel.exception.ExcelDataConvertException: Can not find ‘Converter’ support class Set.

问题解释

EasyExcel开源框架中Converter接口的convertToExcelData只实现了转换BigDecimal、Bolean、Byte[]、btye[]、Byte、Date、Double、File、Float、InputStream、Integer、Long、Short、URL这些类型,意味着参数data最多只能是个二维数据,但是本次业务逻辑需要转换List< String >的数据。

解决办法

编写自定义Converter转换器:

Set转字符串

  1. package com.tj.demo.utils.easyExcel;
  2. import com.alibaba.excel.converters.Converter;
  3. import com.alibaba.excel.metadata.GlobalConfiguration;
  4. import com.alibaba.excel.metadata.data.WriteCellData;
  5. import com.alibaba.excel.metadata.property.ExcelContentProperty;
  6. import org.apache.commons.lang3.StringUtils;
  7. import java.util.Set;
  8. public class TjEasyExcelSetConverter implements Converter<Set> {
  9. @Override
  10. public WriteCellData<?> convertToExcelData(Set value, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) throws Exception {
  11. String res = StringUtils.join(value, ","); //把集合数组拼接字符串
  12. return new WriteCellData<String>(res);
  13. }
  14. }

角色ID转角色名称

转换器里好像不支持查询数据库,和自己的API

  1. package com.tj.demo.utils.easyExcel;
  2. import com.alibaba.excel.converters.Converter;
  3. import com.alibaba.excel.metadata.GlobalConfiguration;
  4. import com.alibaba.excel.metadata.data.WriteCellData;
  5. import com.alibaba.excel.metadata.property.ExcelContentProperty;
  6. import com.alibaba.fastjson.JSON;
  7. import com.tj.demo.system.domain.Roles;
  8. import com.tj.demo.system.service.RolesService;
  9. import org.apache.commons.lang3.StringUtils;
  10. import org.springframework.beans.factory.annotation.Autowired;
  11. import java.util.List;
  12. import java.util.Set;
  13. /**
  14. * EasyExcel输出的时候,把角色ID转成角色名称
  15. */
  16. public class TjEasyExcelRolesConverter implements Converter<Set> {
  17. @Autowired
  18. private RolesService rolesService;
  19. @Override
  20. public WriteCellData<?> convertToExcelData(Set roleIds, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) throws Exception {
  21. //查询出角色信息
  22. List<Roles> roles = rolesService.listByIds(roleIds);
  23. //字符串拼接
  24. StringBuilder result = new StringBuilder();
  25. for (Roles role : roles) {
  26. result.append(role.getRole());
  27. result.append(";");
  28. }
  29. return new WriteCellData<String>(result.toString());
  30. }
  31. }

使用方法:

使用@ExcelProperty(converter = TjEasyExcelSetConverter.class)注解方法

  1. //角色set数组
  2. @TableField(exist = false)
  3. private Set<Long> roleIds;
  4. @TableField(exist = false)
  5. @ExcelProperty(value = "角色", converter = TjEasyExcelSetConverter.class)
  6. @ColumnWidth(20)
  7. private Set<String> roleNames;
  8. //部门set数组
  9. @TableField(exist = false)
  10. private Set<Long> deptIds;
  11. @TableField(exist = false)
  12. @ExcelProperty(value = "部门", converter = TjEasyExcelSetConverter.class)
  13. @ColumnWidth(20)
  14. private Set<String> deptNames;

常用Format

  1. @DateTimeFormat(value = "yyyy-MM-dd")