2013-04-25 14 views
8

Quando sto leggendo file di Excel (formato .xls), continuo a ricevere un'eccezione:java.lang.IllegalArgumentException: Il tuo InputStream non era né un flusso OLE2, né un flusso di OOXML

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

I Go osservò e scoprì che se il flusso di input non supportava il reset o il mark, dovrei completarlo con . Il mio flusso di input non è mark \ reset supportato.

Quindi utilizzare pushbackStream è l'unica opzione? Come usarlo? E a che cosa serve?

Grazie

+1

Sei sicuro che il tuo file sia davvero un file .xls di Excel? E non, ad esempio, un file .csv o .html con l'estensione modificata? – Gagravarr

+0

No, è un file .xls di Excel. – mee

+0

Si prega di fornire il vostro SSCCE. –

risposta

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 

immagino che si sta utilizzando cartella di lavoro in fabbrica o un diverso file di input in formato e diverso tipo di cartella di lavoro. Questo errore di solito si apre quando non è in grado di non leggere il tipo di file. Il POI di Apache non controlla l'estensione del file. Se lo apri in un editor di testo, vedrai che sarà in un formato diverso. Oppure è possibile inizializzare il tipo di cartella di lavoro su HSSF o XSSF, prima di utilizzare Workbook Factory.

Più semplice soluzione è quella di aprire il file utilizzando Microsoft Excel e salvarlo come un altro file (utilizzando File> Salva Come opzione da Microsoft Excel > Menu).

Workbook Factory non controlla l'estensione del file, ma controlla il tipo MIME del file. In sostanza, Excel funziona con file diversi (ad esempio: i file creati con applicazioni di terze parti, versione Excel 2003), ma il POI di Apache è molto specifico.

PushbackInputStream aggiunge la funzionalità "respingi" o "non letto" a un altro flusso di input. Ti permette di leggere in anticipo alcuni byte per vedere cosa sta arrivando, prima di poter determinare come interpretare il byte corrente.

Se non si utilizza Workbook Factory, PushbackInputStream è l'unica alternativa immagino.

Se è possibile condividere il codice qui posso verificarlo e riconfermarlo.

+0

Il tuo suggerimento non mi aiuta :( –

+0

Posso aiutarti se riesci a parlarmi dell'errore in dettaglio –

+0

Grazie tu, ma non ricordo il problema, l'ho risolto! :) –

Problemi correlati