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.