9

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

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

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

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

谢谢

4

1 回答 1

6
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 不检查文件扩展名。如果您在文本编辑器中打开它,您会看到它采用不同的格式。或者,您可能在使用 Workbook Factory 之前将工作簿类型初始化为 HSSF 或 XSSF。

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

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

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

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

如果您可以在此处共享代码,我可以对其进行测试并重新确认。

于 2014-04-23T07:56:08.997 回答