java.lang.IllegalArgumentException: ваш InputStream не был ни потоком OLE2, ни потоком OOXML

Когда я читаю файл Excel (формат .xls), я продолжаю получать исключение:

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

Я погуглил и обнаружил, что если входной поток не поддерживает сброс или отметку, я должен обернуть его pushbackStream. Мой входной поток не поддерживается пометкой\сбросом.

Значит, использование pushbackStream — единственный вариант? Как это использовать? И какая от него польза?

Спасибо


person mee    schedule 25.04.2013    source источник
comment
Вы уверены, что ваш файл действительно является файлом Excel .xls? А не, скажем, файл .csv или .html с измененным расширением?   -  person Gagravarr    schedule 25.04.2013
comment
Нет, это файл Excel .xls.   -  person mee    schedule 25.04.2013
comment
Пожалуйста, предоставьте свой SSCCE.   -  person Michael 'Maik' Ardan    schedule 25.04.2013
comment
Файл также может быть пустым, например, чтение из InputStream не удалось или все данные уже были ранее прочитаны.   -  person golimar    schedule 27.10.2016


Ответы (1)


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

Я предполагаю, что вы используете Workbook Factory ИЛИ другой входной файл формата и другой тип рабочей книги. Эта ошибка обычно появляется, когда не удается прочитать тип файла. Apache POI не проверяет расширение файла. Если вы откроете его в текстовом редакторе, вы увидите, что вместо этого он будет в другом формате. Или вы можете инициализировать тип рабочей книги как HSSF или XSSF перед использованием Workbook Factory.

Более простое решение — открыть файл с помощью Microsoft Excel и сохранить его как другой файл (используя параметр Файл>Сохранить как из Microsoft Excel> Меню).

Workbook Factory не проверяет расширение файла, вместо этого проверяет тип файла MIME. В основном excel работает с разными файлами (например, файлы, созданные с помощью сторонних приложений, версия excel 2003), но Apache POI очень специфичен.

PushbackInputStream добавляет функциональность «отправить» или «непрочитать» в другой входной поток. Это позволяет вам прочитать несколько байтов вперед, чтобы увидеть, что будет дальше, прежде чем вы сможете определить, как интерпретировать текущий байт.

Если вы не используете Workbook Factory, я думаю, PushbackInputStream — единственная альтернатива.

Если вы можете поделиться кодом здесь, я могу проверить его и подтвердить.

person Tejus Prasad    schedule 23.04.2014
comment
Ваше предложение мне не поможет :( - person Andrey E; 12.11.2014
comment
Я могу помочь вам, если вы можете подробно рассказать мне об ошибке. - person Tejus Prasad; 28.12.2014
comment
Спасибо, но я не помню проблемы. Я решил это! :) - person Andrey E; 03.01.2015
comment
МОЖЕТЕ ли вы предоставить решение @Andrey E - person Labeo; 19.10.2015
comment
@Labeo К сожалению, я не помню эту проблему и то, как я ее решил. Думаю, вам следует создать отдельный вопрос, если этот ответ вам не помог. Или просто подробно объясните свою проблему и поделитесь кодом. - person Andrey E; 19.10.2015
comment
stackoverflow.com/questions/33175608/ - person Labeo; 19.10.2015