1. 程式人生 > >利用OFFICE 2003 OWC 繪圖控制元件在.NET平臺下實現資料圖表的繪製

利用OFFICE 2003 OWC 繪圖控制元件在.NET平臺下實現資料圖表的繪製

來源:蘭州大學網路教育學院

宋昀傑 馬青 劉江

摘要:OWC,即Office Web Components,是微軟隨Office提供的繪圖控制元件,設計的目的是為眾多的控制元件容器提供互動的電子表格建模,資料報表和資料視覺化功能。OWC庫包含四個主要的元件:電子表格元件,圖表元件,透視表元件和資料來源元件。.NET平臺下,就如何利用OWC繪圖控制元件來實現資料圖表的構建。 關鍵詞:資料製圖;繪圖控制元件;OFFICE OWC; Microsoft Visual Studio;ASP.NET;C# 1.在程式中引用OWC 要利用OWC繪圖控制元件繪圖就要將OWC引入程式,OFFICE 2003 中OWC為OWC11,預設路徑在
C:\Program Files\Common Files\Microsoft Shared\Web Components\11\owc11;在VS中新增OWC11,首先在:com選項卡中選擇 “Misrosoft Office 11.0 Object Library”或直接選擇路徑為C:\Program Files\Common Files\Microsoft Shared\Web Components\11\owc11的owc11;然後在程式後臺新增程式集引用: using Microsoft.Office.Interop.Owc11; 2.根據資料生成所需圖表 根據某服裝廠2007年至2010年盈利額資料繪製盈利額柱形圖。


2.1 X軸和Y軸的定義和設定

定義陣列 YearNum、MonCount分別存放年份和年度盈利額

string[] YearNum = new string[]{“2007”,“2008年”,“2009年”,”2010年”}; string[] MonCount = new string[]{“774824”,1254489”,“808946”,“789845”}; X 軸指定特定字串,以便顯示年度 string strXdata = String.Empty; foreach (string strData in YearNum) { strXdata += strData + "\t"; }
strXdata = strXdata.Remove(strXdata.Length - 1); 為 Y 軸指定的定字串,以便顯示金額 string strYdata = String.Empty; foreach (string strValue in MonCount) { strYdata += strValue + "\t"; } 是否顯示Y軸的圖示說明 InsertChart.Axes[0].HasTitle = true;Y軸新增圖示說明 InsertChart.Axes[0].Title.Caption = "Y : 金額"; 是否顯示X軸的圖示說明 InsertChart.Axes[1].HasTitle = true;X軸新增圖示說明 InsertChart.Axes[1].Title.Caption = "X : 年份 "; 2.2建立圖表容器並將圖表新增如容器 建立ChartSpace物件來放置圖表 ChartSpace laySpace = new ChartSpaceClass();ChartSpace物件中新增圖表 ChChart InsertChart = laySpace.Charts.Add(0); 2.3設定圖表型別 指定繪製圖表的型別,型別可以通過OWC.ChartChartTypeEnum列舉值得到。下面建立的是3D的柱形圖表 InsertChart.Type = ChartChartTypeEnum.chChartTypeColumnClustered3D; 2.4 設定圖表縮微圖、標題 指定圖表是否需要圖例標註 InsertChart.HasLegend = true; 指定是否需要縮微圖 InsertChart.HasLegend = false 是否顯示標題 InsertChart.HasTitle = true; 為圖表新增標題 InsertChart.Title.Caption = " 2007年-2010年盈利表"; 2.5新增圖表系列,併為系列繫結資料在圖形物件中新增一個系列 InsertChart.SeriesCollection.Add(0); 給定系列名字 InsertChart.SeriesCollection[0].SetData(ChartDimensionsEnum.chDimCategories, +(int)ChartSpecialDataSourcesEnum.chDataLiteral, strXdata); 給定系列值 InsertChart.SeriesCollection[0].SetData(ChartDimensionsEnum.chDimValues, (int)ChartSpecialDataSourcesEnum.chDataLiteral, strYdata); 2.6生成圖表GIF圖,並設定路徑及顯示 顯示資料,建立GIF檔案的相對路徑. string FileName = DateTime.Now.Hour.ToString() + DateTime.Now.Minute.ToString() +DateTime.Now.Second.ToString() + DateTime.Now.Millisecond.ToString() + ".gif"; objCSpace.ExportPicture(@"D:\Data\OwcImg\ChartDetail.gif", "GIF", 450, 300); Image1.ImageUrl = "Http://localhost/Data/OwcImg/ChartDetail.gif"; 按照以上程式碼步驟進行編寫,結果如圖1所示:


2.7 其他屬性 圖表的可設定屬性還包括:圖表的字型設定、設定圖表的邊框、設定圖表系列顏色等。 圖表字型屬性:objChart.Legend.Font 圖表邊框屬性:InsertChart.Border 圖表系列顏色:InsertChart.SeriesCollection.Points.Interior.SetSolid(); 2.8 其他型別圖表 通過OWC.ChartChartTypeEnum列舉值還可以建立其他型別的圖表,例如:餅圖、折線圖、條形圖、面積圖等;但是,根據資料表的不同以及在繪製圖表時所選屬性的不同。例如,在繪製餅圖時,不能設定X軸和Y軸的屬性,在選擇圖表型別時選擇平面餅圖chChartTypePie或3D餅圖chChartTypePie3D; InsertChart.Type = ChartChartTypeEnum. chChartTypePie3D;
2.9 建立系列集合 有些情況下,根據資料需求,可能需要建立系列集合,例如要繪製2007年至2010年每個季度的資料圖表,就需要建立系列集合。


這裡就需要新增多個系列

InsertChart.SeriesCollection.Add(0); InsertChart.SeriesCollection.Add(1); InsertChart.SeriesCollection.Add(2); InsertChart.SeriesCollection.Add(3); 然後給每個系列繫結資料,先定義所需的資料變數 string MonCount_1 = ""; string MonCount_2 = ""; string MonCount_3 = ""; string MonCount_4 = ""; 將資料付給變數後繫結資料 InsertChart.SeriesCollection[0].SetData(ChartDimensionsEnum.chDimValues, +(int)ChartSpecialDataSourcesEnum.chDataLiteral, MonCount_1); InsertChart.SeriesCollection[0].SetData(ChartDimensionsEnum.chDimCategories, +(int)ChartSpecialDataSourcesEnum.chDataLiteral, "2007年"); InsertChart.SeriesCollection[1].SetData(ChartDimensionsEnum.chDimValues, +(int)ChartSpecialDataSourcesEnum.chDataLiteral, MonCount_2); InsertChart.SeriesCollection[1].SetData(ChartDimensionsEnum.chDimCategories, +(int)ChartSpecialDataSourcesEnum.chDataLiteral, "2008年); InsertChart.SeriesCollection[2].SetData(ChartDimensionsEnum.chDimValues, +(int)ChartSpecialDataSourcesEnum.chDataLiteral, MonCount_3); InsertChart.SeriesCollection[2].SetData(ChartDimensionsEnum.chDimCategories, +(int)ChartSpecialDataSourcesEnum.chDataLiteral, "2009年"); InsertChart.SeriesCollection[3].SetData(ChartDimensionsEnum.chDimValues, +(int)ChartSpecialDataSourcesEnum.chDataLiteral, MonCount_4); InsertChart.SeriesCollection[3].SetData(ChartDimensionsEnum.chDimCategories, +(int)ChartSpecialDataSourcesEnum.chDataLiteral, "2010年"); 為每個季度設定不同的顏色 InsertChart.SeriesCollection[0].Caption = "第一季度盈利額(元)"; InsertChart.SeriesCollection[0].Interior.SetSolid("blue"); InsertChart.SeriesCollection[1].Caption = "第二季度盈利額(元)"; InsertChart.SeriesCollection[1].Interior.SetSolid("red"); InsertChart.SeriesCollection[2].Caption = "第三季度盈利額(元)"; InsertChart.SeriesCollection[2].Interior.SetSolid("green"); InsertChart.SeriesCollection[3].Caption = "第四季度盈利額(元)"; InsertChart.SeriesCollection[3].Interior.SetSolid("purple"); 接下來將圖表儲存為FIG圖形,顯示到頁面即可,繪製好的資料圖表如圖3所示
2.10 OWC幫助 在繪製圖表時,還需要實現什麼效果或使用什麼OWC屬性,可以查閱OWC說明文件,說明文件在安裝Office之後,預設在C:\Program Files\Common Files\Microsoft Shared\Web Components\11\2052目錄中;下面有幾個*.chm檔案便是,如果沒有這幾個檔案,嘗試把Office完全安裝一下,或者自定義安裝的時候選中相應的選項。但它們是針對如何在Excel中使用,而不是在.Net或Java或Dephi中如何使用的,它只是按字母順序列出了OWC元件所有的物件、集合、方法、屬性、列舉,以及少量的示例程式碼,查詢很不方便。 3.利用OWC繪製資料圖表的優劣 因為OWC是隨Microsoft Office安裝的一款繪圖控制元件,所以方便普及,不需要專門進行下載和配置,但是與一些專業的繪圖控制元件相比,繪圖功能有所侷限,且沒有較完整的說明文件,導致繪製圖表時程式碼編寫略微複雜繁瑣。然而,由於OWC屬於Microsoft的產品,所以在同為Microsoft產品的.NET平臺下使用,有較強的相容性和穩定性。 4.結束語 本文結合日常開發實際使用經驗,參考OWC說明文件,展現出的是使用OWC控制元件繪製圖表的部分方法,足以滿足簡單的資料繪圖需求。OWC尚有諸多屬性及方法,很多尚未被很好的理解使用,可以參照本文的思路,研究更為簡潔的資料圖表繪製方法。