Задать вопрос
@Alecxandrys

Почему ломает форматирование при редактировании документов с помощью POI?

День добрый
При формировании документа в xls посредством POI сбивается форматирование и макросы копии исходного документа, которая и обрабатывается. Как сохранить форматирование исходного документа при вливании в него своих данных и сохранении?

Исходный код блока, который формирует документ.
Переменная file является ссылкой на оригинальный документ
fileInputStream = new FileInputStream(file);

Workbook wb = WorkbookFactory.create(fileInputStream); 
fileOutputStream = new FileOutputStream(file.getAbsolutePath().substring(0,
file.getAbsolutePath().length()-4)+"_returned.xls");
wb.write(fileOutputStream);
fileOutputStream.close();
fileInputStream.close();
  • Вопрос задан
  • 435 просмотров
Подписаться 1 Оценить 2 комментария
Решения вопроса 1
@Alecxandrys Автор вопроса
Проблема была решена тем, что исходный файл был сохранён как xlsm (xlsx c макросами) и уже из шаблона такого формата было произведено формирование нового документа. Все макросы и форматирование сохранилось в новом документе.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@bobzer
Java EE Developer
Да, ваш файл и у меня тоже после копирования с POI теряет форматирование, да и вообще открывается с ошибками. Как я и предполагал, дело в самом файле: в нем слишком много всего наворочено, даже парольная защита на изменения... К сожалению, POI не всемогущий, и поддерживает далеко не все функции Excel. И дело не столько в разработчиках POI, сколько в формате, используемом Microsoft. Разработчики POI даже используют аббревиатуру HSSF - Horrible Spreadsheet Format (ужасный формат таблиц). Думаю, что в чистом виде в вашем случае решения проблемы с POI нет, надо искать обходной вариант. Можно попробовать использовать нативный API Microsoft (для Java затруднительно), либо как-то менять исходный файл, либо смириться с потерями и брать из файла только данные (а форматирование реализовывать в своём коде).

Вообще, POI в основном используется для выгрузки данных Java-программ, а работа с произвольными существующими файлами применяется редко...
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы