2

我在 Jett 用户邮件列表上发布了这个,但一个多月没有回复。

这是问题

我在你的网站上看到你有:每张纸上的豆子/克隆纸

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

如果模板工作表包含 Excel 图表,当 Jett 克隆该模板工作表时,它是否完全复制工作表上的所有内容,包括图表?

4

1 回答 1

1

JETT 依靠 Apache POI 来执行所有电子表格操作。要复制模板表,它调用Workbook'scloneSheet方法。该方法似乎可以尽可能地复制所有内容,但它根本不能很好地复制图表。我使用带有图表的“工作表特定bean”进行了测试,以在模板工作表中进行克隆。我测试了 .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 的错误数据库中添加一个新错误。

于 2015-01-09T00:19:49.953 回答