2013-04-25 2 views
8

Wenn ich lese Excel-Datei (.xls-Format), halte ich eine Ausnahme erhalten:java.lang.IllegalArgumentException: Ihr Input war weder ein OLE2 Strom, noch ein OOXML Strom

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

I Go- ogled und festgestellt, dass, wenn der Eingabestream nicht unterstützt Reset oder markieren, ich es mit pushbackStream umbrechen sollte. Mein Eingabestream wird nicht unterstützt.

Also die pushbackStream ist die einzige Option? Wie man es benutzt? Und was ist der Nutzen davon?

Dank

+1

Sind Sie sicher, dass Ihre Datei wirklich eine .xls-Excel-Datei ist? Und nicht etwa eine .csv oder .html Datei mit der Erweiterung geändert? – Gagravarr

+0

Nein, es ist eine Excel-Datei .xls. – mee

+0

Bitte geben Sie Ihren SSCCE an. –

Antwort

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 

Ich denke, man Arbeitsmappe Fabrik oder eine andere Format Eingabedatei und anderen Arbeitsmappe Typen verwenden. Dieser Fehler tritt normalerweise auf, wenn er den Dateityp nicht lesen kann. Apache POI überprüft die Dateierweiterung nicht. Wenn Sie es in einem Texteditor öffnen, sehen Sie stattdessen, dass es in einem anderen Format vorliegt. Oder Sie initialisieren den Arbeitsmappentyp auf HSSF oder XSSF, bevor Sie Workbook Factory verwenden.

Einfachere Lösung ist die Datei mit Microsoft Excel zu öffnen und als eine andere Datei speichern (mit Datei> Speichern Als Option von Microsoft Excel > Menü).

Workbook Factory überprüft nicht die Dateierweiterung, sondern prüft den MIME-Typ der Datei. Grundsätzlich funktioniert Excel mit verschiedenen Dateien (zB: Dateien, die mit Drittanbieter-Anwendungen erstellt wurden, Version 2003), aber Apache POI ist sehr spezifisch.

PushbackInputStream fügt "Push-Back" oder "Ungelesen" -Funktionalität zu einem anderen Eingabestrom hinzu. Sie können einige Bytes vorlesen, um zu sehen, was kommt, bevor Sie bestimmen können, wie das aktuelle Byte zu interpretieren ist.

Wenn Sie nicht Workbook Factory verwenden, ist PushbackInputStream die einzige Alternative, denke ich.

Wenn Sie den Code hier teilen können, kann ich es testen und erneut bestätigen.

+0

Ihr Vorschlag hilft mir nicht :( –

+0

Ich kann Ihnen helfen, wenn Sie mir über den Fehler im Detail erzählen können. –

+0

Danke Sie, aber ich erinnere mich nicht an das Problem.Ich habe es gelöst! :) –