我有一个带有图表的Powerpoint演示文稿,我想使用Java和Apache's POI进行访问。当我使用Powerpoint编辑图形数据时,将打开一个带有值的Excel窗口,我想从我的Java应用程序中访问这些值。
如何以编程方式访问图表的值?
答案 0 :(得分:5)
在第一部分中,我们需要导航到XSLFChart
对象:
final String filename = "resources/fptbenchmark/Powerpoint Import.pptx";
final XMLSlideShow ppt = new XMLSlideShow(new FileInputStream(filename));
final XSLFSlide slide = ppt.getSlides()[5];
幻灯片包含不同的部分(getRelations()
),其中一部分应该
包含XSLFChart
:
final List<POIXMLDocumentPart> relations = slide.getRelations();
assert relations.size() == 3;
final XSLFChart xslfChart = (XSLFChart)relations.get(2);
当您检查调试器中的xslfChart
变量时,您会注意到
字段CTChartImpl chart
显示基础XML数据,即
可能看起来像这样:
<xml-fragment xmlns:c="http://schemas.openxmlformats.org/drawingml/2006/chart"
xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main"
xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships">
<c:autoTitleDeleted val="0"/>
<c:plotArea>
<c:scatterChart>
<c:ser>
<c:tx>
<c:strRef>
<c:f>Sheet1!$E$8</c:f>
<c:strCache>
<c:ptCount val="1"/>
<c:pt idx="0">
<c:v>y axis caption</c:v>
</c:pt>
</c:strCache>
</c:strRef>
</c:tx>
<c:xVal>
<c:numRef>
<c:f>Sheet1!$A$9:$A$28</c:f>
<c:numCache>
<c:formatCode>General</c:formatCode>
<c:ptCount val="20"/>
<c:pt idx="0">
<c:v>1200</c:v>
</c:pt>
<c:pt idx="1">
<c:v>1600</c:v>
</c:pt>
<c:pt idx="2">
<c:v>2000</c:v>
</c:pt>
...
您可以从CTChart
:
CTChart ctChart = xslfChart.getCTChart();
由于存在<c:plotArea>
标记,因此请将关联的成员函数调用
访问它:
CTPlotArea plotArea = ctChart.getPlotArea();
从那里你应该可以浏览
List<CTNumVal> ptList = plotArea.getScatterChartList().get(1)
.getSerList().get(0)
.getXVal()
.getNumRef()
.getNumCache()
.getPtList();
现在您可以访问值:
ptList.get(0).getV();
<强>参考强>