[alibaba/easyexcel]使用 2.0.0-beta5,怎么读取到 xls 文件的多个 Sheet 的数据?

2024-06-20 550 views
7

因为一个 Excel sheet 的个数和名字都是未知的,所以之前使用 1.1.2-beta5 是这样写的: 1.1.2-beta5

ExcelListener excelListener = new ExcelListener();
try (InputStream in = IOUtil.toBuffered(bookStream)) {
    ExcelReader excelReader = new ExcelReader(in, null, excelListener);
    List<Sheet> sheets = excelReader.getSheets();
    if (CollectionUtil.isNotEmpty(sheets)) {
        sheets.forEach(excelReader::read);
    }
} catch (IOException e) {
    throw new ServiceException("Excel 解析失败", e);
}

上面的写法对于 xls/xlsx 都是可以正常读取所有 sheet 的数据,但是从 1.1.2-beta5 升级到 2.0.0-beta5 ,使用新的 API 后,只有 xlsx 文件可以读取所有 sheet 的数据,xls 文件无法正常读取: 2.0.0-beta5

ExcelListener excelListener = new ExcelListener();
try (InputStream in = IOUtil.toBuffered(bookStream)) {
    ExcelReader excelReader = EasyExcel.read(in, excelListener).build();
    // xls 文件 获取到的 sheets 是空的
    List<ReadSheet> sheets = excelReader.excelExecutor().sheetList();
    if (CollectionUtil.isNotEmpty(sheets)) {
        sheets.forEach(excelReader::read);
    }
    excelReader.finish();
} catch (IOException e) {
    throw new ServiceException("Excel 解析失败", e);
}

请问这是 bug,还是我的写法不对??

回答

2

这个比较复杂一点。1.1.2 其实是读取了所有文件,不支持读取指定sheet。目前xls 必须提前知道有个sheet 才能一个个读取。后续我再想想方案。

5

方案我想到了 问题先不关。实现方案比较复杂 两周内更新。

8

因为一个 Excel sheet 的个数和名字都是未知的,所以之前使用 1.1.2-beta5 是这样写的: 1.1.2-beta5

ExcelListener excelListener = new ExcelListener();
try (InputStream in = IOUtil.toBuffered(bookStream)) {
    ExcelReader excelReader = new ExcelReader(in, null, excelListener);
    List<Sheet> sheets = excelReader.getSheets();
    if (CollectionUtil.isNotEmpty(sheets)) {
        sheets.forEach(excelReader::read);
    }
} catch (IOException e) {
    throw new ServiceException("Excel 解析失败", e);
}

上面的写法对于 xls/xlsx 都是可以正常读取所有 sheet 的数据,但是从 1.1.2-beta5 升级到 2.0.0-beta5 ,使用新的 API 后,只有 xlsx 文件可以读取所有 sheet 的数据,xls 文件无法正常读取: 2.0.0-beta5

ExcelListener excelListener = new ExcelListener();
try (InputStream in = IOUtil.toBuffered(bookStream)) {
    ExcelReader excelReader = EasyExcel.read(in, excelListener).build();
    // xls 文件 获取到的 sheets 是空的
    List<ReadSheet> sheets = excelReader.excelExecutor().sheetList();
    if (CollectionUtil.isNotEmpty(sheets)) {
        sheets.forEach(excelReader::read);
    }
    excelReader.finish();
} catch (IOException e) {
    throw new ServiceException("Excel 解析失败", e);
}

请问这是 bug,还是我的写法不对?? 您好,请问这种写法,读取excel后的返回的数据类型是ArrayList吗?