使用POI生成xml图

时间:2013-10-06 21:12:56

标签: java excel apache-poi

我正在使用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

1 个答案:

答案 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);

通过这种方式,您只需手动创建名称范围,然后根据命名范围手动创建图形/图表,然后需要更新命名范围...由于图表/图表基于此,它会自动更新。