当我正在阅读Excel文件(.xls格式)时,我不断收到异常:
java.lang.IllegalArgumentException: Your Input Stream was neither an OLE 2 stream, nor an OOXML stream.
我Go-ogled并发现如果输入流不支持重置或标记,我应该用pushbackStream
包装它。我的输入流未支持mark \ reset。
所以使用pushbackStream
是唯一的选择吗?如何使用它?什么是使用它?
由于
答案 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
是唯一的选择。
如果您可以在此处共享代码,我可以对其进行测试并重新确认。