java.lang.IllegalArgumentException: Ihr InputStream war weder ein OLE2-Stream noch ein OOXML-Stream

8

Wenn ich eine Excel-Datei (.xls-Format) lese, bekomme ich immer eine Ausnahme:

%Vor%

Ich habe gegoogelt und festgestellt, dass wenn der Eingabestream Reset oder Markierung nicht unterstützt, ich ihn mit pushbackStream umbrechen sollte. Mein Eingabestream ist nicht markiert \ reset unterstützt.

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

Danke

    
mee 25.04.2013, 08:29
quelle

1 Antwort

4
%Vor%

Ich nehme an, Sie verwenden Workbook Factory ODER eine andere Format-Eingabedatei und einen anderen Arbeitsmappentyp. 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 zu speichern (mit Datei & gt; Speichern Als Option von Microsoft Excel & gt; Menü ).

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

PushbackInputStream fügt einem anderen Eingabestream die Funktion "Push-Back" oder "Ungelesen" 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, die ich vermute.

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

    
Tejus Prasad 23.04.2014 07:56
quelle

Tags und Links