Excel вылетает и неправильно отображает файлы, написанные с использованием Apache POI (в формате Excel 87-2003 .XLS) - PullRequest
1 голос
/ 03 февраля 2012

наши приложения Java EE записывают большие (> 3000 строк,> 300 столбцов) файлы Excel с использованием Apache POI.Мы реализовали требование заказчика, чтобы многие (> 500) ячеек в записанном файле имели частичное форматирование текста, то есть текст в одной ячейке частично красный и жирный, а частично черный.

Apache POI не жалуется при записи файлов, и они могут быть открыты, НО Excel 97 отображает их неправильно: части ячеек имеют неправильный размер шрифта, и ячейки с несколькими цветами шрифта не могут быть изменены (изменениеразмер шрифта на них не работает).

Кроме того, Excel 2010 жалуется, что файл небезопасен (при загрузке с сервера), и Excel 97 и Excel 2010 часто аварийно завершают работу с экспортированными файлами.

Предыдущая версия приложения использовала JExcelApi и не писала многоформатные текстовые ячейки.Файлы, сгенерированные сервером с использованием предыдущей (JExcelApi) версии приложения, обычно отображаются в Office2010 без предупреждения безопасности.

Кто-нибудь сталкивался с этими проблемами и, если да, как я могу их исправить?

Кроме того, кто-нибудь выяснил, почему настройка автофильтров не отображается в Office 2010 в указанном, но показываетв Excel 97 правильно (поэтому иногда происходит сбой или работает, пока не выбран один автофильтр?).

Наконец, я попытался обойти экспорт в Excel более старой версии приложения и обнаружил, что Apache POI уменьшает размер файла на> 35%, в то же время нарушая содержимое файла - хотя изменения не применяются (просто прочитав файл в книгу HSSF и переписав его в ByteArrayOutputStream. Кто-нибудь придумал, как предотвратить POI для изменения записанного файла?

Спасибо,

Майкл

Ответы [ 2 ]

0 голосов
/ 31 января 2014

Основная причина нашей проблемы была связана с условным форматированием, представленным в файлах шаблонов Excel. В результате выходной файл имел условное форматирование.
Мы избавились от условного форматирования и теперь все хорошо! Проблема проявляется очень сильно, когда пользователи пытаются получить доступ к файлам по сети. Условное форматирование можно удалить из Excel. Не забудьте также удалить условное форматирование из всех листов / стилей.

0 голосов
/ 03 февраля 2012

Здесь много вопросов, но похоже, что POI выводит записи, которые 97 неправильно истолковывают.Существуют значительные различия между 97 '.xls и 2003 .xls.Диалог, ведущий себя странно, часто является признаком искаженной записи.В Excel 2010 имеется средство проверки двоичных файлов, которое выполняется внутри любого из файлов двоичного формата (BIFF).Он подхватит любые записи, которые не соответствуют спецификациям BIFF.

Я не уверен, что происходит с автофильтрами или изменением поведения.

Если у вас много проблем с POI, вы можете проверить OfficeWriter, который неплохо справляется с валидацией и стилями 2010 года в целом.

ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: Я один из инженеров, которые написали последнюю версию.

...