2009-09-21 11 views
5

Próbowałem używać JXL i Apache POI do ładowania danych z pliku Excela, do tej pory mechanizm JXL działał dobrze. Nawet jeśli osadzę obrazy w pliku.Parsowanie plików JXL i Apache POI z dołączonymi obiektami obrazu

Otrzymałem plik ze źródła, które przyzwyczajenie analizować, otrzymuję następujący wyjątek z UM

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) 

iz JXL uzyskać indeks poza granicami

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) 

ładuje plik do Excel, ale nie w otwartym biurze, a jedyne co mogę zobaczyć w surowych danych to obiekt związany z Adobe XMP Core 4.1 ... który wydaje się być przyczyną problemu, jeśli usunę obraz, to działa dobrze ... jeśli Włożę w to kolejny jpg.

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

Czy jest jakiś sposób, aby to zignorować? Jak mam zamiar parsować ten plik.

Dzięki.

Odpowiedz

2

Jedną z rzeczy, którą należy wypróbować, jest użycie nowszej wersji Apache POI - błędy takie jak te poprawiają się z czasem.

Jeśli ostatnia wersja UM nie pomoże (3.8 beta 2 na piśmie), należy otworzyć nowy błąd w POI bugzilla i przesłać plik problemu. Wyjątek, który widzisz, wynika z POI, które sądzi, że powinna istnieć pewna ilość danych i znajduje więcej. Dzięki plikowi będzie można określić, dlaczego dane tam są, i obejść je. (To znaczy, zakładając, że nie zostało już naprawione!)