Coudnt читает файлы Excel определенного вида с API Apache-Poi - PullRequest
0 голосов
/ 19 ноября 2011

Пожалуйста, ознакомьтесь с файлом sample.xls clcik здесь

Я использовал Apache-Poi для чтения xls файлов и преобразования их в HTML табличный формат.

Для немногих файлов POIFSFileSystem (inputStream) не может принять inputStream. Исключение составляет:

java.io.IOException: Unable to read entire header; 36 bytes read; expected 512 bytes
at org.apache.poi.poifs.storage.HeaderBlock.alertShortRead(HeaderBlock.java:226)
at org.apache.poi.poifs.storage.HeaderBlock.readFirst512(HeaderBlock.java:207)
at org.apache.poi.poifs.storage.HeaderBlock.<init>(HeaderBlock.java:104)
at org.apache.poi.poifs.filesystem.POIFSFileSystem.<init>(POIFSFileSystem.java:138)
at openReports.ReadExcelSheet.readExcelFile(ReadExcelSheet.java:24)
at openReports.ReadFolderInMail.getDetailsOfMail(ReadFolderInMail.java:109)
at openReports.ReadFolderInMail.getDetailsOfMail(ReadFolderInMail.java:104)
at openReports.OpenReportsProject.main(OpenReportsProject.java:55)

Я мог заметить, что это из-за файла, который сохраняется как xls файл, но формат файла не 2003. Я получаю эти файлы из другого источника, поэтому я не могу вручную изменить расширения файлов. Если я их скачаю и поменяю, то проблема решена. Но я не могу делать это каждый раз, потому что он должен работать как планировщик.

Так может кто-нибудь предложить решение этой проблемы.

Спасибо.

Ответы [ 2 ]

1 голос
/ 13 августа 2012

Два возможных решения:

  • если ваш файл Excel .xls, тогда попробуйте org.apache.poi.hssf пакет
  • , если ваш файл Excel .xlsx, тогда попробуйте org.apache.poi.xssf пакет

hssf используется для файла формата .xls, а xssf используется для .xlsx

1 голос
/ 19 ноября 2011

Вы должны перейти от использования пользовательской модели HSSF к пользовательской модели SS в POI. Он способен читать / записывать как файлы XLS, так и XLSX. Я не думаю, что вы можете использовать его с POIFileSystem, но вы все равно можете читать в файлах Excel, не используя этот класс.

...