Apache POI:复制包含图表的工作表

3
根据多个来源的信息,例如官方页面上的“限制”部分(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图表?


你使用的POI版本是什么? - Gagravarr
@Gagravarr 我正在使用3.7版本。我也曾经切换到3.8 beta 5版本一段时间,检查它是否在3.8中修复了,但结果并没有。 - Piotr Sobczyk
仍然在3.17版本中无法工作。 - jontro
2个回答

6

我最终想到了一个相当复杂的解决方案:

  1. 通过Excel宏生成大量模板图表表格(例如1000张)
  2. 使用Apache POI在需要的表格中输入数据,并操作被图表使用的命名区域
  3. 使用Apache POI将需要的表格重命名为所需的名称(因此我只能使用HSSF,因为XSSF在重命名表格后不更新Excel中的命名区域引用:-()
  4. 使用Apache POI删除其余的表格

实现这个概念上简单而常见的用例(即将带有图表的内容导出到Excel)需要付出很大的努力,但至少它是可能的,并且效果相当不错。


0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接