Jett:Excel Java 中的模板:克隆包含图表的工作表
Jett : Excel Templating in Java : cloning sheets that contain charts
我在 Jett 用户邮件列表上发布了这个,但一个多月没有回复。
这是问题
我在您的网站上看到您有:每张纸上的豆子 Basis/Cloning 张纸
http://jett.sourceforge.net/transformation/sheet_specific_beans.html
如果模板 sheet 包含 Excel 图表,当 Jett 克隆该模板 sheet 时,它是否完全复制 sheet 上的所有内容,包括图表?
JETT 依靠 Apache POI 执行所有传播sheet 操作。要复制模板 sheet,它会调用 Workbook
's cloneSheet
method。该方法似乎可以尽可能地复制所有内容,但它根本不能很好地复制图表。我测试了使用 "sheet specific beans" 和 sheet 上的图表来克隆模板 sheet。我测试了 .xls 和 .xlsx 模板,并尝试了 Apache POI 3.9、3.10 和 3.11。我使用了最新版本的 JETT,在撰写本文时为 0.9.0。
无论使用何种版本的 Apache POI,结果都是相同的。结果因使用的是 .xls (HSSF) 还是 .xlsx (XSSF) 而异,但无论哪种方式,结果都不好。
- .xls 转换:
当调用 cloneSheet
方法时,我从 Apache POI 得到一个 RuntimeException
:
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)
此异常阻止生成结果传播sheet。
- .xlsx 转换:
对 cloneSheet
的调用成功,但结果传播sheet 被破坏。当我在 Excel 中打开价差 sheet 时,它会抱怨 "unreadable content",并从每个克隆的 sheet 中删除图表对象,原始 sheet 除外.如果原始 sheet 的名称没有改变,那么该图表将完好无损。但是,如果原始模板 sheet 的名称确实发生了变化,那么图表的系列引用不会发生变化并且会丢失。
很遗憾,JETT 对此无能为力;这是一个 Apache POI 问题。当 Apache POI 创建 API 图表支持时,希望这会有所改善。欢迎在 Apache POI's bug database.
中添加新错误
我在 Jett 用户邮件列表上发布了这个,但一个多月没有回复。
这是问题
我在您的网站上看到您有:每张纸上的豆子 Basis/Cloning 张纸
http://jett.sourceforge.net/transformation/sheet_specific_beans.html
如果模板 sheet 包含 Excel 图表,当 Jett 克隆该模板 sheet 时,它是否完全复制 sheet 上的所有内容,包括图表?
JETT 依靠 Apache POI 执行所有传播sheet 操作。要复制模板 sheet,它会调用 Workbook
's cloneSheet
method。该方法似乎可以尽可能地复制所有内容,但它根本不能很好地复制图表。我测试了使用 "sheet specific beans" 和 sheet 上的图表来克隆模板 sheet。我测试了 .xls 和 .xlsx 模板,并尝试了 Apache POI 3.9、3.10 和 3.11。我使用了最新版本的 JETT,在撰写本文时为 0.9.0。
无论使用何种版本的 Apache POI,结果都是相同的。结果因使用的是 .xls (HSSF) 还是 .xlsx (XSSF) 而异,但无论哪种方式,结果都不好。
- .xls 转换:
当调用 cloneSheet
方法时,我从 Apache POI 得到一个 RuntimeException
:
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)
此异常阻止生成结果传播sheet。
- .xlsx 转换:
对 cloneSheet
的调用成功,但结果传播sheet 被破坏。当我在 Excel 中打开价差 sheet 时,它会抱怨 "unreadable content",并从每个克隆的 sheet 中删除图表对象,原始 sheet 除外.如果原始 sheet 的名称没有改变,那么该图表将完好无损。但是,如果原始模板 sheet 的名称确实发生了变化,那么图表的系列引用不会发生变化并且会丢失。
很遗憾,JETT 对此无能为力;这是一个 Apache POI 问题。当 Apache POI 创建 API 图表支持时,希望这会有所改善。欢迎在 Apache POI's bug database.
中添加新错误