我正在使用POI以xls格式创建报告。然后我增强了它以显示报告中的数据图。根据POI的限制,它无法在Excel中创建图形。所以,我每次都使用模板并在其中重写数据,图表会刷新。
Cell cell = row.getCell(columnsArray[j1]);
cell.setCellValue(Integer.valueOf(count));
糟糕的做法,但我必须硬编码数组中单元格的位置。
int columnsArray[] = {
1,2,3,4,5,6,7,8,9,10
};
任何使用更好的方法或任何其他POI替代品的人都可以实现这一目标吗?
提前致谢, GV
答案 0 :(得分:2)
现在,apache POI limitation正在说“您目前无法创建图表。但是,您可以在Excel中创建图表,使用HSSF修改图表数据值并编写新的电子表格。这是可能是因为POI试图尽可能保持现有记录的完整性。“
然而,在同样的情况下,我使用命名范围在Excel工作表上手动创建了一个图表,并使用java,我按照我的要求更新了命名范围。由于图表基于命名范围,因此它也会更新。
您可以更新命名范围的现有参考,并根据您的要求进行设置。
假设引用包含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);
通过这种方式,您只需手动创建名称范围,然后根据命名范围手动创建图形/图表,然后需要更新命名范围...由于图表/图表基于此,它会自动更新。