EasyExcel导出问题

报错信息!!!

错误一:

com.alibaba.excel.exception.ExcelAnalysisException: java.lang.NoClassDefFoundError: Could not initialize class net.sf.cglib.beans.BeanMap$Generator
com.alibaba.excel.exception.ExcelAnalysisException: java.lang.VerifyError: class net.sf.cglib.core.DebuggingClassWriter overrides final method visit.(IILjava/lang/String;Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;)V

在这里插入图片描述

上面两种报错!!!都是一个原因,各种查询之后,说是版本冲突,这种就很头疼

经过排查,我在pom中将单元测试的依赖注解之后,导入就正常了
在这里插入图片描述

错误二:

com.alibaba.excel.exception.ExcelDataConvertException: Can not find 'Converter' support

在这里插入图片描述
原因:默认只能转换BigDecimal、Bolean、Byte[]、btye[]、Byte、Date、Double、File、Float、InputStream、Integer、Long、Short、URL几种类型,== 所以必须自己手动编写一个转换类==

我原本得实体类:用的数据类型是:LocalDateTime,不能自动转换
在这里插入图片描述
修改后:自己编辑了一个转换类LocalDateConverter

    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    @ExcelProperty(value="时间",index = 10,converter = LocalDateConverter.class)
    @ColumnWidth(25)
    private LocalDateTime turnoutTime;

LocalDateConverter

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;

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;

public class LocalDateConverter implements Converter<LocalDateTime> {
    @Override
    public Class<LocalDateTime> supportJavaTypeKey() {
        return LocalDateTime.class;
    }
 
    @Override
    public CellDataTypeEnum supportExcelTypeKey() {
        return CellDataTypeEnum.STRING;
    }

    @Override
    public LocalDateTime convertToJavaData(CellData cellData, ExcelContentProperty excelContentProperty, GlobalConfiguration globalConfiguration) throws Exception {
        return LocalDateTime.parse(cellData.getStringValue(), DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
    }

 
    @Override
    public CellData convertToExcelData(LocalDateTime localDate, ExcelContentProperty excelContentProperty
            , GlobalConfiguration globalConfiguration) throws Exception {
        return new CellData<>(localDate.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
    }
}

一般情况下应该是解决了!!!

但是部署后问题还是一样!!也不知道为什么没有生效。
于是乎,经过不断得尝试,还是报一样得错,无奈之下我只能在:EasyExcel写入数据之前得到list集合循环遍历,然后逐个用字符串进行时间转换

实体类更改:用一个String字符来代替LocalDateTime 来写入Excel
在这里插入图片描述
代码

   @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    @ExcelIgnore
//    @ExcelProperty(value="时间",index = 10,converter = LocalDateConverter.class)
    private LocalDateTime turnoutTime;

    @ExcelProperty(value="时间",index = 10)
    private String turnoutTimeString;

逻辑层更改

 List<Student> stus= (List<Student>) studentService.listByIds(student.getIds());
                log.info("stuss数据条数:{}",stus.size());
                List<Student> list = JSON.parseArray(JSON.toJSONString(stus), Student.class);
                for (Student stu: list) {
                    
					//类型的判断
                    String sex="男";
                    if (stu.getSex() == 1) {
                        sex="男";
                    } else if (stu.getSex() == 2) {
                        sex="女";
                    }
                    stu.setSexName(sex);
                    DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
					//将LocalDateTime转换String
                    stu.setTurnoutTimeString(stu.getTurnoutTime().format(formatter));
                }
                excelWriter.write(list, sheet);
           		excelWriter.finish();

最后到这里再进行运行,就没什么问题了,只是可能有些性能的消耗,毕竟要是数据量大,10w+的数据,这种情况有待考量,至于转换类不生效的问题后期发现了再更吧,有知道的伙计们也分享一下呗!!(奇怪的是我在注解里面加得index = 10得序号和 @ColumnWidth(25)都没有生效,当然类型的转换类也没有生效!!!)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值