com.alibaba.excel.exception.ExcelWriteDataConvertException: Can not find 'Converter' support class M
  39foGL4G2uIg 2023年11月02日 78 0

这个异常通常是因为在使用阿里巴巴的 easyexcel 库进行 Excel 读写时,存在 Map 类型的数据没有指定处理器导致的。

解决这个异常的方法有两种:

  1. 自定义 Converter 处理器

你可以自定义一个Converter处理器来支持Map类型的转换。首先,创建一个类,实现com.alibaba.excel.convert.Converter<java.util.Map>接口,然后实现convertToExcelData()convertToJavaData()两个方法,以支持Map类型的读写操作。最后,在写Excel或者读取Excel时,将该处理器指定给相应的列即可。

示例代码:

public class MapConverter implements Converter<Map> {
    @Override
    public Class<Map> supportJavaTypeKey() {
        return Map.class;
    }

    @Override
    public void convertToExcelData(Map map, Sheet sheet, WriteCellData<?> cellData, Cell cell,
                                    WriteCellStyle cellStyle) {
        // 将Map转换为需要写入Excel中的数据
        // 写入到cellData中
    }

    @Override
    public Map convertToJavaData(CellData cellData, ExcelContentProperty contentProperty,
                                    GlobalConfiguration globalConfiguration) throws Exception {
        // 将Excel中读取的数据转换为Map类型
        // 返回Map类型的数据
        return null;
    }
}

在写Excel时,将Converter处理器指定给相应的列,示例代码:

// 创建ExcelWriter对象
ExcelWriter excelWriter = new ExcelWriter(outputStream, ExcelTypeEnum.XLSX);

// 指定处理器
WriteSheet writeSheet = EasyExcel.writerSheet().registerWriteHandler(new MapConverter())
    .sheetName("Sheet1").head(head).build();

// 写数据到 Excel 中
excelWriter.write(data, writeSheet);

// 完成内容的写入
excelWriter.finish();

在读Excel时,将Converter处理器指定给相应的列,示例代码:

// 创建ExcelReader对象
ExcelReader excelReader = EasyExcel.read(inputStream)
        .registerConverter(new MapConverter())
        .build();

// 指定读取哪个sheet和从哪行开始读取
ReadSheet readSheet = EasyExcel.readSheet(0).headRowNumber(1).build();

// 开始读取操作
List<Map> dataList = excelReader.read(readSheet);
  1. 将 Map 类型转换为 Java Bean

另一种解决办法是将 Map 类型转换为 Java Bean 类型。这样就能够使用 easyexcel 默认的处理器来读取和写入 Excel 了。

示例代码:

@Data // lombok注解,生成getter/setter方法
public class MyBean {
    private String key;
    private String value;
}

List<Map<String,String>> mapList = new ArrayList<>();

// 假设Map中包含了key-value对,需要将其转换为MyBean类型
for (Map<String,String> map : mapList) {
    MyBean bean = new MyBean();
    bean.setKey(map.get("key"));
    bean.setValue(map.get("value"));
    myBeanList.add(bean);
}

// 将Java Bean写入Excel
ExcelWriter excelWriter = new ExcelWriter(outputStream, ExcelTypeEnum.XLSX);

WriteSheet writeSheet = EasyExcel.writerSheet().sheetName("Sheet1").head(head).build();

excelWriter.write(myBeanList, writeSheet);
excelWriter.finish();

// 从Excel中读取Java Bean
ExcelReader excelReader = EasyExcel.read(inputStream).build();
ReadSheet readSheet = EasyExcel.readSheet(0).headRowNumber(1).build();

List<MyBean> myBeanList = excelReader.read(readSheet, MyBean.class);

以上是两种解决办法,希望能帮到你!

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

上一篇: Python 练习实例14 下一篇: 色彩空间的变化
  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
  2Vtxr3XfwhHq   2024年05月17日   55   0   0 Java
  Tnh5bgG19sRf   2024年05月20日   110   0   0 Java
  8s1LUHPryisj   2024年05月17日   46   0   0 Java
  aRSRdgycpgWt   2024年05月17日   47   0   0 Java
39foGL4G2uIg