excel填充java.lang.IllegalArgumentException: Class of bean unknown

场景:需要将导出成功的sheet页模板改为多个sheet页模板

问题出现原因:使用Easy Excel填充数据时只有有空数据

解决:不使用之前的excel方法,换个方法即可

ExcelWriter excelWriter = null;

            //第一个sheet
            excelWriter = EasyExcel.write(response.getOutputStream()).build();
            WriteSheet sheet0 = EasyExcel.writerSheet(0, "导出").head(Dto.class).build();
            excelWriter.write(tableIDList, sheet0);
            //第二个sheet页
            WriteSheet sheet1 = EasyExcel.writerSheet(1, "第二个sheet").head(Dto.class).build();
            excelWriter.write(List, sheet1);
            excelWriter.finish();

需要多少个sheet页就可以按照此方法添加,也可以导出不同的sheet页表头,替换Dto.class即可

如果你发现导出的时候报 ExcelDataConvertException:Can not find 'Converter' support class ArrayList错误,那么恭喜你需要写转换器了

原因 :

解释:

EasyExcel自身实现了一些常用类型的Converter来支持excel数据到对象的转换,例如 BigDecimal、Bolean、Byte[]、btye[]、Byte、Date、Double、File、Float、InputStream、Integer、Long、Short、Url。若使用了其他数据类型 或 想定制化数据转换方式,需要实现自己的Converter,并在使用EasyExcel时注册

源头:

是因为使用的实体类对象中存在ArrayList,你的报什么错就写什么转换器用即可

    @ApiModelProperty("多个对象")
    private List<Item> children = new ArrayList();

解决:

首先书写Converter转换器

package cn.crec.hr.basic.staff.convert.organ;

import java.util.ArrayList;
import java.util.List;

import com.alibaba.excel.converters.Converter;
import com.alibaba.excel.enums.CellDataTypeEnum;
import com.alibaba.excel.metadata.CellData;
import com.alibaba.excel.metadata.GlobalConfiguration;
import com.alibaba.excel.metadata.property.ExcelContentProperty;

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

    @Override
    public CellDataTypeEnum supportExcelTypeKey() {
        return CellDataTypeEnum.STRING;
    }

    @Override
    public ArrayList convertToJavaData(CellData cellData, ExcelContentProperty excelContentProperty, GlobalConfiguration globalConfiguration) throws Exception {
        String stringValue = cellData.getStringValue();
        String[] split = stringValue.split(",");
        ArrayList<String> enterpriseList = new ArrayList<>();
        for (int i = 0; i < split.length; i++) {
            enterpriseList.add(split[i]);
        }
        return enterpriseList;
    }

    @Override
    public CellData convertToExcelData(ArrayList list, ExcelContentProperty excelContentProperty, GlobalConfiguration globalConfiguration) throws Exception {
        StringBuilder stringBuilder = new StringBuilder();
        list.forEach(o -> {
            String s = o.toString();
            stringBuilder.append(s + ",");
        });
        return new CellData(stringBuilder.toString());
    }
}

在 EasyExcel中注册

         WriteSheet writeSheet1 = EasyExcel.writerSheet(sheet, sheetName).registerConverter(new ListConverter()).head(DictDto.class).build();
        excelWriter.write(zwucu, writeSheet1);

最后就可正常导出多个sheet页

本文参考了许多的文章,项目写好后又让写其他东西,导致找不到链接了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值