如何使用Apache POI从Excel电子表格获取图表信息?

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

XSSFWorkbook xwb = new XSSFWorkbook("charts_lines.xlsx"); XSSFSheet sheet = xwb.getSheetAt(0); 

我也可以遍历包部件来检索图表部分,但是我不知道如何继续检索关于图表的任何信息?

请注意,我不兴趣使用兴趣点创build图表,只读尽可能多的图表信息…我也没有保存xlsx。 我只是希望提取线条颜色,标签,数据,图表types(饼图,线条等)

目前还没有一个高层次的表示,所以你需要下拉到xmlbeans层次,并使用低层次的CT *对象。

对于图表,有XSSFChartSheet ,它会给你一个CTChartsheet对象,它有一些信息。

对于XSSFChartXSSFChartSheet (常规和图表),您需要通过图纸来获取图表。 每张带图表的图纸都应该有一个图纸,而图表则是从图纸链接而不是图纸本身。

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

虽然有点烦琐,但是如果你的CTChart对象得到了很好的解决方案,请考虑发送POI补丁。

您可以使用XSSFDrawing图表数据作为XML XSSFDrawing

喜欢

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

将打印整个图表作为XMl也使用

 drawing.getCharts(); 

你可以添加Iterator来浏览图表

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