jjzjj

java.lang.IllegalArgumentException : Your InputStream was neither an OLE2 stream, 也不是 OOXML 流

coder 2024-03-13 原文

当我读取 Excel 文件(.xls 格式)时,我不断收到异常:

java.lang.IllegalArgumentException: Your Input Stream was neither an OLE 2 stream, nor an OOXML stream.

我搜索了一下,发现如果输入流不支持重置或标记,我应该用pushbackStream 包装它。我的输入流不支持标记\重置。

那么使用pushbackStream 是唯一的选择吗?如何使用它?它有什么用?

谢谢

最佳答案

Your InputStream was neither an OLE2 stream, nor an OOXML stream
java.lang.IllegalArgumentException: Your InputStream was neither an OLE2 stream, nor an OOXML stream

我猜您正在使用 Workbook Factory 或不同格式的输入文件和不同的工作簿类型。当无法读取文件类型时,通常会弹出此错误。 Apache POI 不检查文件扩展名。如果您在文本编辑器中打开它,您会看到它采用不同的格式。或者您可能在使用工作簿工厂之前将工作簿类型初始化为 HSSF 或 XSSF。

更简单的解决方案是使用 Microsoft Excel 打开文件并将其另存为另一个文件(使用 Microsoft Excel > 菜单 中的File>Save As 选项)。

Workbook Factory 不检查文件扩展名,而是检查文件 MIME 类型。基本上 excel 适用于不同的文件(例如:使用第三方应用程序创建的文件,excel 2003 版本),但 Apache POI 非常具体。

PushbackInputStream 将“推回”或“未读”功能添加到另一个输入流。它允许您提前读取几个字节以查看即将发生的内容,然后才能确定如何解释当前字节。

如果您不使用 Workbook Factory,PushbackInputStream 是我猜的唯一选择。

如果您可以在这里分享代码,我可以测试并再次确认。

关于java.lang.IllegalArgumentException : Your InputStream was neither an OLE2 stream, 也不是 OOXML 流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16209939/

有关java.lang.IllegalArgumentException : Your InputStream was neither an OLE2 stream, 也不是 OOXML 流的更多相关文章

随机推荐