参考: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 >的数据。
解决办法
Set转字符串
package com.tj.demo.utils.easyExcel;import com.alibaba.excel.converters.Converter;import com.alibaba.excel.metadata.GlobalConfiguration;import com.alibaba.excel.metadata.data.WriteCellData;import com.alibaba.excel.metadata.property.ExcelContentProperty;import org.apache.commons.lang3.StringUtils;import java.util.Set;public class TjEasyExcelSetConverter implements Converter<Set> {@Overridepublic WriteCellData<?> convertToExcelData(Set value, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) throws Exception {String res = StringUtils.join(value, ","); //把集合数组拼接字符串return new WriteCellData<String>(res);}}
角色ID转角色名称
转换器里好像不支持查询数据库,和自己的API
package com.tj.demo.utils.easyExcel;import com.alibaba.excel.converters.Converter;import com.alibaba.excel.metadata.GlobalConfiguration;import com.alibaba.excel.metadata.data.WriteCellData;import com.alibaba.excel.metadata.property.ExcelContentProperty;import com.alibaba.fastjson.JSON;import com.tj.demo.system.domain.Roles;import com.tj.demo.system.service.RolesService;import org.apache.commons.lang3.StringUtils;import org.springframework.beans.factory.annotation.Autowired;import java.util.List;import java.util.Set;/*** EasyExcel输出的时候,把角色ID转成角色名称*/public class TjEasyExcelRolesConverter implements Converter<Set> {@Autowiredprivate RolesService rolesService;@Overridepublic WriteCellData<?> convertToExcelData(Set roleIds, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) throws Exception {//查询出角色信息List<Roles> roles = rolesService.listByIds(roleIds);//字符串拼接StringBuilder result = new StringBuilder();for (Roles role : roles) {result.append(role.getRole());result.append(";");}return new WriteCellData<String>(result.toString());}}
使用方法:
使用@ExcelProperty(converter = TjEasyExcelSetConverter.class)注解方法
//角色set数组@TableField(exist = false)private Set<Long> roleIds;@TableField(exist = false)@ExcelProperty(value = "角色", converter = TjEasyExcelSetConverter.class)@ColumnWidth(20)private Set<String> roleNames;//部门set数组@TableField(exist = false)private Set<Long> deptIds;@TableField(exist = false)@ExcelProperty(value = "部门", converter = TjEasyExcelSetConverter.class)@ColumnWidth(20)private Set<String> deptNames;
常用Format
@DateTimeFormat(value = "yyyy-MM-dd")
