java.lang.IllegalArgumentException:您的InputStream既不是OLE2流也不是OOXML流

时间:2013-04-25 08:29:45

标签: java xls xssf poi-hssf

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

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

我Go-ogled并发现如果输入流不支持重置或标记,我应该用pushbackStream包装它。我的输入流未支持mark \ reset。

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

由于

1 个答案:

答案 0 :(得分:4)

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>菜单中的文件>保存作为选项)。

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

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

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

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