首页 > 解决方案 > java.lang.ArrayIndexOutOfBoundsException: Index -2 out of bounds for length 46410 在使用 Apache POI 打开 XLS 文件时是什么意思?

问题描述

我有一个 Microsoft Excel XLS 文件(2003 格式),当尝试使用 Apache POI 3.17(和 4.1.2)打开时,我得到以下堆栈跟踪。我可以在 Excel 2016 中打开 Excel 文件而不会出现任何错误。

我确实注意到,使用 Excel 2016 保存文件时,我可以通过 Apache POI 打开它。它还显示使用 Excel 2016 保存文件后,文件大小从 15 MB 减少到 11 MB。

原始文件确实有很多空白列延伸得很远,并且减少了文件中的一些行最终允许我使用 Apache POI 打开它,但它并不特定于行中的任何特定内容。由于敏感信息和无法编辑它最终解决了问题,我无法发布原始文件。

打开 XLS 文件的代码

    import org.apache.poi.hssf.usermodel.HSSFWorkbook;
    import org.apache.poi.poifs.filesystem.POIFSFileSystem;


    final POIFSFileSystem fs = new POIFSFileSystem(new File("/home/dev/Downloads/test.xls"), true);
    final HSSFWorkbook xlsToAppendWorkbook = new HSSFWorkbook(fs);

堆栈跟踪

java.lang.ArrayIndexOutOfBoundsException: Index -2 out of bounds for length 46410
                at org.apache.poi.poifs.filesystem.BlockStore$ChainLoopDetector.claim(BlockStore.java:99)
                at org.apache.poi.poifs.filesystem.NPOIFSFileSystem.readCoreContents(NPOIFSFileSystem.java:414)
                at org.apache.poi.poifs.filesystem.NPOIFSFileSystem.<init>(NPOIFSFileSystem.java:234)
                at org.apache.poi.poifs.filesystem.NPOIFSFileSystem.<init>(NPOIFSFileSystem.java:167)
                at org.apache.poi.poifs.filesystem.POIFSFileSystem.<init>(POIFSFileSystem.java:98)
                at

标签: javaexcelapache-poiapache-poi-4

解决方案


推荐阅读