Apache POI修改图表而不使用命名范围

时间:2013-04-28 08:22:06

标签: java excel apache-poi openoffice-calc

我需要将数据从我的数据库呈现到.xls电子表格中。 我可以毫无问题地读/写xls文件,但显然我不能从头开始创建图表。

我阅读了我能找到的所有文档,并使用Excel中的图表创建了一个模板文件,由POI修改。

我面临的问题如下:我能够创建命名范围,将它们分配给我的图表并通过POI修改它们,完全没问题。当我恢复到OpenOffice Calc问题时:它不支持命名范围作为图表的数据源,所以:

有没有办法更新图表数据而不使用命名范围(我可以自己给出图表范围,每个系列是一行的分隔部分)?

谢谢

1 个答案:

答案 0 :(得分:0)

使用命名范围是根据要放置在图表中的未知数据量来更改图表数据的最简单方法。

如果数据中的行数是常量,那么您可以将恒定范围的数据分配给图表。

如果事先知道行数,那么没有命名范围就会变得更加棘手。这里的关键是在模板表的图表中使用Excel的OFFSETCOUNTA公式。

This article描述了使用这些公式根据数据内容创建动态范围。

COUNTA公式计算填充恒定范围内的单元格数。 OFFSET公式根据其输入创建动态范围,其中包括范围起点的列和行参数,以及动态范围需要多大的长度和宽度参数。

例如,如果第1行中有标题行,则您有5个数据字段(列A-E),并且您知道数据中的A列永远不会为空或空,例如。

First Name | Last Name | Hire Date | Salary | Manager
-----------+-----------+-----------+--------+---------
Data       | Goes      | Here      |        |

...然后在图表范围内使用类似下列公式的内容来确定动态范围:

=OFFSET(A2, 0, 0, COUNTA(A2:A101), 5)

这意味着:从A2开始。调整范围的起点,偏移量为0行和0列(范围的左上角为A2)。范围的高度是在A2和A101之间填充的行数(假设您的数据最多为100行;根据您的需要调整A101常量)。范围的宽度为5列。

上面链接的文章更详细地描述了它。