JXL и Apache POI разбираются с прикрепленными объектами изображения - PullRequest
5 голосов
/ 22 сентября 2009

Я пытался использовать JXL и Apache POI для загрузки данных из файла Excel, до сих пор механизм JXL работал нормально. Даже если я вставлю изображения в файл.

Я получил файл из источника, который не анализируется, я получаю следующее исключение с 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)

и с помощью jxl я получаю индекс вне границ

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)

Файл загружается в Excel, но не в открытый офис, и единственное, что я вижу в исходных данных, это связанный объект Adobe XMP Core 4.1 ... который, похоже, является причиной проблемы, если я удаляю изображение это работает нормально ... если я вставлю еще один 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        ">

Есть ли способ игнорировать это? Как мне разобраться с этим файлом?

Спасибо.

1 Ответ

2 голосов
/ 10 апреля 2011

Одна вещь, которую стоит попробовать, - использовать более новую версию Apache POI - подобные ошибки исправляются со временем.

Если последняя версия POI не помогает (3.8 beta 2 на момент написания), вам следует открыть новую ошибку в bugzilla POI и загрузить файл проблемы. Исключение, которое вы видите, вызвано тем, что POI полагает, что должно быть определенное количество данных, и находит больше. С помощью файла можно будет определить, почему эти данные есть, и обойти его. (То есть, если это еще не исправлено!)

...