参考: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> {
@Override
public 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> {
@Autowired
private RolesService rolesService;
@Override
public 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")