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

标签 java excel apache-poi openoffice-calc

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

我阅读了所有能找到的文档,并创建了一个模板文件,其中包含 Excel 中的图表以供 POI 修改。

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

有没有办法在不使用命名范围的情况下更新图表数据(我可以自己给图表指定范围,每个系列都是行的分隔部分)?

谢谢

最佳答案

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

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

如果行数事先未知,那么没有命名范围就会变得更加棘手。这里的关键是在模板工作表的图表中使用 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 列。

上面链接的文章对此进行了更详细的描述。

关于java - Apache POI 修改图表而不使用命名范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16261011/

相关文章:

Excel VBA 获取唯一值

java - ClassNotFoundException:derby ClientDriver(Spring MVC + Hibernate JPA)

java - 如何在 XWPFTableCell 上设置自定义背景颜色?

python-3.x - 网页抓取 : My first project and no idea where to start

vba - 将值和颜色从一个工作簿复制到另一个工作簿,而不复制条件格式

java - 有什么方法可以识别 Apache POI xwpf 文档的字符样式吗?

java - 使用 ColdFusion 从 Outlook .msg 文件中提取附件

java - 在不打开excel文档的情况下用java打印整个Excel工作簿

java - Java中使用 json-simple 将List转换为JsonObject

java - 发生异常“org.netbeanSecurity :Illegal attempt to exit early?