alibaba / easyexcel

快速、简洁、解决大文件内存溢出的java处理Excel工具
https://easyexcel.opensource.alibaba.com
Apache License 2.0
32.09k stars 7.5k forks source link

当尝试读取多个sheet时,发生下标越界 #3937

Open mclubing opened 1 month ago

mclubing commented 1 month ago

建议先去看文档

快速开始常见问题

触发场景描述

我的逻辑是为了移除最后一个sheet仅读取前N个。easyexcel版本是4.0.2,jdk版本是:graalVM17

触发Bug的代码

        List<ReadSheet> readSheets = excelReader.excelExecutor().sheetList();
        log.info("sheet列表:{}", readSheets);

        // 最后一个sheet为待写入数据的sheet
        ReadSheet writeSheet = readSheets.stream().max(Comparator.comparingInt(ReadSheet::getSheetNo)).orElse(new ReadSheet(3, "Sheet4"));
        log.info("待写入sheet:{}", writeSheet);
        readSheets.removeIf(x -> Objects.equals(x.getSheetNo(), writeSheet.getSheetNo()));
        log.info("待读取sheet列表:{}", readSheets);
        .....
        excelReader.read(readSheets);

# 提示的异常或者没有达到的效果
java.lang.IndexOutOfBoundsException: Index 3 out of bounds for length 3
    at java.base/jdk.internal.util.Preconditions.outOfBounds(Preconditions.java:64) ~[na:na]
    at java.base/jdk.internal.util.Preconditions.outOfBoundsCheckIndex(Preconditions.java:70) ~[na:na]
    at java.base/jdk.internal.util.Preconditions.checkIndex(Preconditions.java:266) ~[na:na]
    at java.base/java.util.Objects.checkIndex(Objects.java:359) ~[na:na]
    at java.base/java.util.ArrayList.get(ArrayList.java:427) ~[na:na]
    at com.alibaba.excel.analysis.v03.handlers.BofRecordHandler.processRecord(BofRecordHandler.java:42) ~[easyexcel-core-4.0.2.jar:na]
    at com.alibaba.excel.analysis.v03.XlsSaxAnalyser.processRecord(XlsSaxAnalyser.java:167) ~[easyexcel-core-4.0.2.jar:na]
    at org.apache.poi.hssf.eventusermodel.MissingRecordAwareHSSFListener.processRecord(MissingRecordAwareHSSFListener.java:200) ~[poi-5.2.5.jar:5.2.5]
    at org.apache.poi.hssf.eventusermodel.FormatTrackingHSSFListener.processRecord(FormatTrackingHSSFListener.java:94) ~[poi-5.2.5.jar:5.2.5]
    at org.apache.poi.hssf.eventusermodel.HSSFRequest.processRecord(HSSFRequest.java:104) ~[poi-5.2.5.jar:5.2.5]
    at org.apache.poi.hssf.eventusermodel.HSSFEventFactory.genericProcessEvents(HSSFEventFactory.java:174) ~[poi-5.2.5.jar:5.2.5]
    at org.apache.poi.hssf.eventusermodel.HSSFEventFactory.processEvents(HSSFEventFactory.java:131) ~[poi-5.2.5.jar:5.2.5]
    at org.apache.poi.hssf.eventusermodel.HSSFEventFactory.processWorkbookEvents(HSSFEventFactory.java:82) ~[poi-5.2.5.jar:5.2.5]
    at org.apache.poi.hssf.eventusermodel.HSSFEventFactory.processWorkbookEvents(HSSFEventFactory.java:56) ~[poi-5.2.5.jar:5.2.5]
    at com.alibaba.excel.analysis.v03.XlsSaxAnalyser.execute(XlsSaxAnalyser.java:141) ~[easyexcel-core-4.0.2.jar:na]
    at com.alibaba.excel.analysis.ExcelAnalyserImpl.analysis(ExcelAnalyserImpl.java:124) ~[easyexcel-core-4.0.2.jar:na]
    at com.alibaba.excel.ExcelReader.read(ExcelReader.java:66) ~[easyexcel-core-4.0.2.jar:na]