Apache POI:克隆包含图表的工作表

根据众多的资料来源,例如官方页面上的限制部分,使用Excel中的Excel图表的唯一好方法就是使用现有图表的Excel文件作为模板,并修改图表使用的源单元格。 它运作良好。

问题是我们不仅需要一个,而且需要有多个(我们不知道在编译时有多less个)具有相同图表但不同(dynamic生成)的数据的工作表。 使用cloneSheet(sheetNumber)是一种重复模板工作表的方法。 但是,如果工作正常,直到图表被克隆。

当我尝试用图表克隆工作表时,我得到:

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:71) at org.apache.poi.hssf.model.InternalSheet.cloneSheet(InternalSheet.java:388) at org.apache.poi.hssf.usermodel.HSSFSheet.cloneSheet(HSSFSheet.java:125) at org.apache.poi.hssf.usermodel.HSSFWorkbook.cloneSheet(HSSFWorkbook.java:652) 

更新:

我切换到XSSF,现在至less没有运行时exception。 图表数据被克隆,但没有图表(它们不存在于克隆的图表中)。

有没有人成功克隆工作表与图表(S)? 或者,也许有人有其他的想法如何解决我们有一个问题,即生成dynamic数量的POI工作表的Excel图表?

我结束了相当复杂的解决方法:

  1. 我用Excelmacros生成大量的表格(例如1000)与模板图表
  2. 我使用Apache POI将数据input到尽可能多的工作表(并使用图表使用的命名范围进行操作)
  3. 我根据需要用Apache POI重命名了很多工作表(因此我只限于HSSF,因为在重命名工作表后,XSSF不更新Excel中的命名范围引用:-()
  4. 我用Apache POI删除剩下的表单

实现这个概念上简单而常见的用例(即使用图表导出到Excel)是一个很大的努力,但至less它是可能的,而且工作得很好。