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

时间:2012-03-13 15:19:50

标签: java excel apache-poi export-to-excel

根据众多消息来源,例如Limitations section on official page,使用POI的Excel图表的唯一好方法可能是使用现有图表作为模板的Excel文件并修改图表使用的源单元格。而且效果很好。

问题是我们不仅需要一个而且需要多个(我们不知道编译时有多少)具有相同图表但不同(动态生成)数据的工作表。使用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,现在至少没有运行时异常。工作表数据是克隆的,但不是图表(它们不存在于克隆表中)。

有没有人成功克隆带有图表的工作表?或者也许有人有其他想法如何解决我们的问题,即为POI生成动态数量的工作表的excel图表?

1 个答案:

答案 0 :(得分:6)

我最终得到了相当复杂的解决方法:

  1. 我使用Excel宏的模板图表生成大量工作表(例如1000)
  2. 我使用Apache POI将数据输入到我需要的任意数量的工作表(并使用图表使用的命名范围进行操作)
  3. 我使用Apache POI将所需的页面重命名为我需要的名称(因此我仅限于HSSF,因为XSSF在重命名工作表后不会更新Excel中的命名范围引用:-()
  4. 我使用Apache POI
  5. 删除了其余的工作表

    实现这个概念上简单和常见的用例(即使用图表导出到Excel)是一项认真的工作,但至少它是可行的并且它运行良好。