2011-04-08 98 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(); 

你可以添加迭代它來瀏覽圖表

相關問題