2011-04-08 151 views
4

是否可以使用Apache POI从Office 2007(xlsx/OpenXML)电子表格中提取图表信息?我已经设法阅读电子表格,甚至可以获得引用图表的部分,但不知道如何从该部分检索任何信息,例如图表类型,图表数据等如何使用Apache POI从Excel电子表格获取图表信息?

XSSFWorkbook xwb = new XSSFWorkbook("charts_lines.xlsx"); 

XSSFSheet sheet = xwb.getSheetAt(0); 

我还可以通过封装部件检索表部分重复,但我不明白我怎么然后继续检索有关图表任何信息?

请注意,我对使用POI创建图表不感兴趣,只是尽可能多地阅读图表信息......我也没有保存xlsx。我只是想提取线条颜色,标签,数据,图表类型(饼图,线条等)

回答

6

目前没有高级别表示,所以您需要下拉到xmlbeans级别并使用低级CT *对象。

对于图表来说,有XSSFChartSheet这将给你一个CTChartsheet对象,它有一点信息。

对于这两种XSSFChartXSSFChartSheet(定期和图表工作表),则需要通过图纸去拿到图表。每张带有图表的图纸都应该有一个图形,图表从图形链接而不是图纸本身。

从r1090442(so POI 3.8或更新版本)开始,XSSFDrawing上有一个方法为您提供所有XSSFChart对象(它们是/charts/chart#.xml部分的包装)。如果您使用的是真正旧版的POI,请使用CTDrawing获取图表的详细信息,获取与之相对应的/charts/chart#.xml部分,然后让xmlbeans为您提供CT对象。无论哪种方式,让你得到的标题,类型,数据范围等

虽然有点fiddly,所以请考虑发送POI的补丁,如果你得到了一些很好的工作与CTChart对象!

+0

从r1090442开始,您应该可以获得所有图表很容易从XSSFXraw的XSSFDrawing,希望有所帮助! – Gagravarr 2011-04-08 20:52:41

+0

谢谢你。只是想知道,我已经下载了3.8 beta 1,并且似乎没有XSSFSheet中的XSSFDrawing成员? – Aodh 2011-04-13 10:42:42

+0

你想要的方法是http://poi.apache.org/apidocs/org/apache/poi/xssf/usermodel/XSSFSheet.html#createDrawingPatriarch()。您可能还需要每晚创建一个新的方法来从图形中获取图表。 – Gagravarr 2011-04-14 09:29:32

2

我不知道你的问题的确切答案,但OpenXML SDK 2.0带有一个DocumentReflector.exe工具将向您显示如何定义图表(包括SpreadsheetML和DrawingML包之间的所有关系)。 this article中有关于此工具的更多信息。

4

您可以使用XSSFDrawing

XSSFDrawing drawing = ((XSSFSheet)sheet).createDrawingPatriarch(); 
     System.out.println(drawing.getCTDrawing().toString()); 

将打印整个图表阅读图表数据作为XML作为XMl并且还使用

drawing.getCharts(); 

你可以添加迭代它来浏览图表

相关问题