编程语言
首页 > 编程语言> > java – Apache POI:克隆包含图表的工作表

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

作者:互联网

根据众多消息来源,例如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图表?

解决方法:

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

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

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

标签:export-to-excel,java,excel,apache-poi
来源: https://codeday.me/bug/20190826/1730308.html