java - 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
解决方案
推荐阅读
- python - 打印所有两位数字组合且某些数字不重复的程序
- reactjs - 如何返回反应组件列表
- linux - Docker 没有指向现有的容器
- lapack - OpenBLAS 中 LAPACKE_zgetrf() 和 zgetrf_() 之间的调用约定有什么区别?
- terraform - Terraform 应用失败,因为 kubernetes 提供程序作为没有权限的用户“客户端”运行
- topology - 拓扑和拓扑基础及其大小比较
- react-native - 无法在本机反应中更改标题样式的颜色
- postgresql - 新记录的值似乎保留为 PostgreSQL 触发器函数中两个 if/elseif 块之间的旧记录
- c# - 在 UserControl WPF 中动态绑定情节提要的持续时间
- python - 如何制作一个简单的利息计算器