Java IllegalArgumentException:您的InputStream既不是OLE2流,也不是OOXML流
当我读取Excel文件(.xls格式)时,我不断收到一个异常:Java IllegalArgumentException:您的InputStream既不是OLE2流,也不是OOXML流,java,xls,xssf,poi-hssf,Java,Xls,Xssf,Poi Hssf,当我读取Excel文件(.xls格式)时,我不断收到一个异常: java.lang.IllegalArgumentException: Your Input Stream was neither an OLE 2 stream, nor an OOXML stream. 我仔细观察,发现如果输入流不支持重置或标记,我应该用pushbackStream将其包装起来。我的输入流不支持标记\重置 那么使用pushbackStream是唯一的选择吗?如何使用它?它有什么用 谢谢 我猜您使用的是工作簿工
java.lang.IllegalArgumentException: Your Input Stream was neither an OLE 2 stream, nor an OOXML stream.
我仔细观察,发现如果输入流不支持重置或标记,我应该用pushbackStream
将其包装起来。我的输入流不支持标记\重置
那么使用pushbackStream
是唯一的选择吗?如何使用它?它有什么用
谢谢
我猜您使用的是工作簿工厂或不同格式的输入文件和不同的工作簿类型。当无法读取文件类型时,通常会弹出此错误。Apache POI不检查文件扩展名。如果你在文本编辑器中打开它,你会看到它的格式会有所不同。或者,在使用工作簿工厂之前,您可能正在将工作簿类型初始化为HSSF或XSSF
更简单的解决方案是使用Microsoft Excel打开文件并将其另存为另一个文件(使用MicrosoftExcel>菜单中的文件>另存为选项)
工作簿工厂不检查文件扩展名,而是检查文件MIME类型。基本上excel可以处理不同的文件(例如:使用第三方应用程序创建的文件,excel 2003版本),但Apache POI非常具体
PushbackInputStream
将“pushback”或“未读”功能添加到另一个输入流。在决定如何解释当前字节之前,它允许您提前读取几个字节以查看接下来的内容
如果您没有使用工作簿工厂,PushbackInputStream
是唯一的选择
如果您可以在此处共享代码,我可以测试并再次确认。您确定您的文件确实是Excel.xls文件吗?例如,不是扩展名已更改的.csv或.html文件吗?不是,是Excel.xls文件。请提供您的SSCCE。该文件也可能是空的,例如从InputStream读取失败或之前已读取所有数据您的建议对我没有帮助:(如果你能详细告诉我错误,我可以帮你。谢谢,但我不记得问题了。我已经解决了!)你能提供解决方案@Andrey吗E@Labeo遗憾的是,我不记得那个问题以及我是如何解决的。如果这个答案对你没有帮助,你认为你应该创建一个单独的问题。或者只是详细解释你的问题并分享一些代码。
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