EasyExcel读取多sheet excel异常

EasyExcel读取多sheet excel异常

场景

使用Spring Boot集成EasyExcel进行导入excel多sheet,执行异常

代码

file是MultipartFile,入参,主要处理流程如下

InputStream is = file.getInputStream();
EasyExcel.read(is, SysDict.class, new SysDictReadListener(sysDictMapper, 0L))
        .sheet(0, "目录")
        .doRead();

List<SysDict> list = sysDictMapper.selectByDictClass1();
for (int i = 0; i < list.size(); i++) {
    SysDict sysDict = list.get(i);
    // sheet序号
    Integer sheetNo = i + 1;
    String sheetName = sysDict.getDictName();
    EasyExcel.read(is, SysDict.class, new SysDictReadListener(sysDictMapper, sysDict.getDictId()))
            .sheet(sheetNo, sheetName)
            .doRead();
}

问题描述

异常:com.alibaba.excel.exception.ExcelCommonException: Convert excel format exception.You can try specifying the ‘excelType’ yourself

按照描述,缺少excelType参数,补充后,代码大概如下:

EasyExcel.read(is, SysDict.class, new SysDictReadListener(sysDictMapper, 0L))
        .excelType(ExcelTypeEnum.XLSX)
        .sheet(0, "目录")
        .doRead();

异常:com.alibaba.excel.exception.ExcelAnalysisException: Can not create temporary file!

方案

按照上述补充excelType,并不能解决问题,经过检索,发现问题是多sheet会重复读取流对象,而一个流对象只能读取一次,重复使用,会导致上述异常,解决代码如下:

// 获取MultipartFile的流
is = file.getInputStream();

// 读取第一个sheet
EasyExcel.read(..);

// 读取剩余的sheet
is = file.getInputStream();
EasyExcel.read(..);
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值