2009-09-21 16 views
5

Ho provato a utilizzare JXL e Apache POI per caricare i dati da un file excel, fino a ora il meccanismo JXL ha funzionato correttamente. Anche se incorporo un'immagine nel file.JXL e Apache Analisi dei POI excel con oggetti immagine collegati

ho ricevuto un file da una fonte che wont parse, ottengo la seguente eccezione con POI

Exception in thread "main" org.apache.poi.hssf.record.RecordInputStream$LeftoverDataException: Initialisation of record 0xE2 left 2 bytes remaining still to be read. 
    at org.apache.poi.hssf.record.RecordInputStream.hasNextRecord(RecordInputStream.java:124) 
    at org.apache.poi.hssf.record.RecordFactory.createRecords(RecordFactory.java:402) 
    at org.apache.poi.hssf.usermodel.HSSFWorkbook.<init>(HSSFWorkbook.java:277) 
    at org.apache.poi.hssf.usermodel.HSSFWorkbook.<init>(HSSFWorkbook.java:202) 
    at org.apache.poi.hssf.usermodel.HSSFWorkbook.<init>(HSSFWorkbook.java:184) 
    at testXlsParsers.main(TestXlsParsers.java:19) 

e con jxl ottengo un indice fuori limite

Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 0, Size: 0 
    at java.util.ArrayList.RangeCheck(ArrayList.java:546) 
    at java.util.ArrayList.get(ArrayList.java:321) 
    at jxl.read.biff.WorkbookParser.getSheet(WorkbookParser.java:247) 
    at ParserXLS.parse(ParserXLS.java:27) 
    at ParserXLS.main(ParserXLS.java:46) 

I carichi di file in eccellere ma non in ufficio aperto e l'unica cosa che posso vedere nei dati grezzi è l'oggetto correlato Adobe XMP Core 4.1 ... che sembra essere la causa del problema, se rimuovo l'immagine funziona bene ... se io metto un altro jpg nella sua multa.

<x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="Adobe XMP Core 4.1-c036 46.277092, Fri Feb 23 2007 14:16:18  "> 

C'è un modo per ignorarlo? Come andrei sull'analisi di questo file.

Grazie.

risposta

2

Una cosa da provare è l'utilizzo di una versione più recente di POI Apache: bug come questo vengono corretti nel tempo.

Se l'ultima versione di POI non aiuta (3.8 beta 2 come da scrittura), dovresti aprire un nuovo bug nel bugzilla POI e caricare il file problema. L'eccezione che stai vedendo è causata dal PDI che crede che ci dovrebbe essere una certa quantità di dati e trovare di più. Con il file sarà possibile identificare il motivo per cui i dati sono lì e aggirarli. (Ovvero, supponendo che non sia già stato risolto!)