Jett: Excel Templating в Java: клонирование листов, которые содержат диаграммы

Я надеюсь, что разработчик Jett будет здесь. Я разместил это в списке рассылки пользователей Jett, но не получил ответа более чем через месяц.

Вот вопрос:

Я вижу, что у вас на сайте есть: бобы на листовой основе / листы клонирования

http://jett.sourceforge.net/transformation/sheet_specific_beans.html

Если лист шаблона содержит диаграмму Excel, когда он клонирует этот лист шаблона, полностью ли он копирует все содержимое листа, включая диаграмму?

Я надеюсь, что это может, потому что это действительно поможет!

С Уважением,

Палу

1 ответ

Решение

JETT использует Apache POI для выполнения всех манипуляций с электронными таблицами. Чтобы скопировать лист шаблона, он вызывает Workbook "s cloneSheet метод. Этот метод, кажется, копирует все, что может, но он не копирует диаграммы вообще. Я протестировал использование "листа специфических бобов" с диаграммой на листе для клонирования в шаблоне листа. Я протестировал шаблоны.xls и.xlsx и попробовал Apache POI 3.9, 3.10 и 3.11. Я использовал последнюю версию JETT, которая на момент написания статьи была 0.9.0.

Результаты были одинаковыми, независимо от используемой версии Apache POI. Результаты различались в зависимости от того, были ли использованы.xls (HSSF) или.xlsx (XSSF), но в любом случае результаты были не очень хорошими.

  • Преобразование.xls:

Когда cloneSheet метод называется, я получаю RuntimeException исходя из Apache POI:

Exception in thread "main" java.lang.RuntimeException: The class
    org.apache.poi.hssf.record.chart.ChartFRTInfoRecord needs to define a clone method
at org.apache.poi.hssf.record.Record.clone(Record.java:73)
at org.apache.poi.hssf.model.InternalSheet.cloneSheet(InternalSheet.java:418)
at org.apache.poi.hssf.usermodel.HSSFSheet.cloneSheet(HSSFSheet.java:142)
at org.apache.poi.hssf.usermodel.HSSFWorkbook.cloneSheet(HSSFWorkbook.java:749)
at org.apache.poi.hssf.usermodel.HSSFWorkbook.cloneSheet(HSSFWorkbook.java:100)
at net.sf.jett.transform.ExcelTransformer.transform(ExcelTransformer.java:549)

Это исключение предотвращает создание результирующей электронной таблицы.

  • Преобразование.xlsx:

Призыв к cloneSheet успешно, но полученная электронная таблица повреждена. Когда я открываю электронную таблицу в Excel, она жалуется на "нечитаемый контент" и удаляет объекты диаграммы с каждого клонированного листа, за исключением исходного листа. Если имя исходного листа не меняется, то этот график остается в целости и сохранности. Однако, если имя исходного шаблона шаблона действительно изменяется, то ссылки на серии диаграмм не изменяются и теряются.

К сожалению, JETT ничего не может с этим поделать; это проблема Apache POI. Когда Apache POI создает поддержку API для диаграмм, надеюсь, это улучшится. Не стесняйтесь добавлять новую ошибку в базу данных ошибок Apache POI.

Другие вопросы по тегам