到目前为止,由于apache POI 限制说“您当前无法创建图表。但是,您可以在 Excel 中创建图表,使用 HSSF 修改图表数据值并写出新的电子表格。这是可能的,因为 POI 试图保留现有记录尽可能完好无损”。
但是在同样的情况下,我使用命名范围并使用 java 在 excel 表上手动创建了一个图表,我正在根据我的要求更新命名范围。由于图表基于命名范围,因此它也会得到更新。
您可以更新命名范围的现有参考并根据您的要求进行设置。假设引用包含MySheet!$A$1:$B$8
并且您想将其更改为 MySheet!$B$5:$C$12
对于任何单元格,例如“B5”,在运行时,
cell.getReference();
将为您提供单元格引用(例如......它将返回“B5”)
char startCellColRef = cell.getReference().toString().charAt(0);
将为您提供列参考(如果当前单元格为 B5,将为您提供“B”)。现在
int startCellRowRef = cell.getReference().toString().charAt(1);
会给你行索引(如果当前单元格是 B5,会给你“5”)。
通过同样的方式,您可以获得开始和结束单元格引用(例如 B5 和 C12)。
现在来了如何更新现有的引用。只需使用新创建的引用字符串更新其值
Name reference = wb.getName("NameReferenceInExcelSheet");
referenceString = sheetName+"!$"+startCellColRef+"$"+startCellRowRef+":$"+endCellColRef+"$"+endCellRowRef;
reference.setRefersToFormula(referenceString);
通过这种方式,您只需要手动创建名称范围,然后根据命名范围手动创建您想要的图形/图表,然后您需要更新命名范围......由于图表/图表基于此,它将获得自动更新。