教學

VB.Net OWC圖表制圖元件的使用

話說因為案子需要這樣的功能,才去接觸這樣的元件(通常我都是遇到不會的才去翻…)
但也因為這樣經驗,讓我學到滿多技術

首先今天要介紹的是OWC的元件
OWC(Office Web Component)是微軟的Office增益元件

附在Office的安裝光碟上(office2007已經不是這個元件了,所以只在之前版本可以取得)

找到owc11.msi(這是2003光碟附的)安裝它即可在Visual Studio中使用

附帶一提,我所遇到的情況是..光碟裡附的..無法在visual studio 2008中使用
(如果你不安裝最新版,光碟中還有owc10.msi可供正常使用)

我上到微軟官網上,下載2006年的版本才可以正常使用!
網址為:
微軟下載點
此版本會更新電腦上的Owc元件哦!

安裝好了之後,開啟你的visual studio(這裡我以vb為例)

1.請開啟新專案,並到選單”工具”->”選擇”工具箱項目”
我們要把owc元件放到工具箱中

2.請自行找到下圖中的元件,並勾選

3.回到表單中,請你置入一個,chart11.0的元件
及一個按鈕如下圖

4.請在button1按鈕事件中,撰寫下列語法

Private Sub createImage_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles createImage.Click
AxChartSpace1.Clear() '清空繪圖區

Dim ChartSpace1 As AxOWC11.AxChartSpace = AxChartSpace1   '建立一個繪圖空間(圖表區)
Dim Chart1 As OWC11.ChChart = ChartSpace1.Charts.Add(0) '在ChartSpace1繪圖空間內建一個新圖表(繒圖區)
Dim Chart1_Series1 As OWC11.ChSeries '宣告資料列...

Dim aX, aY
ReDim aX(3)
ReDim aY(3)

aX(0) = "項目一"
aX(1) = "項目二"
aX(2) = "項目三"
aX(3) = "項目四"

Dim ddt As New Random '亂數
aY(0) = ddt.Next
aY(1) = ddt.Next
aY(2) = ddt.Next
aY(3) = ddt.Next

Chart1_Series1 = Chart1.SeriesCollection.Add(0) '在Chart1圖表中加一個資料列
Chart1_Series1.Type = OWC11.ChartChartTypeEnum.chChartTypeColumnClustered

'命名資料系列(名稱將在圖例中顯示出來)
Chart1_Series1.SetData(OWC11.ChartDimensionsEnum.chDimSeriesNames, OWC11.ChartSpecialDataSourcesEnum.chDataLiteral, "測試圖表")
'將資料組中的資料填入圖表
Chart1_Series1.SetData(OWC11.ChartDimensionsEnum.chDimCategories, OWC11.ChartSpecialDataSourcesEnum.chDataLiteral, aX)
Chart1_Series1.SetData(OWC11.ChartDimensionsEnum.chDimValues, OWC11.ChartSpecialDataSourcesEnum.chDataLiteral, aY)

End Sub

‘ 執行結果如下圖:

2008/05/12 更新(若使用C#的開發環境,則略有不同哦,請參考下列語法):

try
{

axChartSpace1.Clear();//先清除繪圖區
ChChart objChart = axChartSpace1.Charts.Add(0);//宣告一個圖表繪圖物件,使用charts.add的方式增加圖表

objChart.Type = ChartChartTypeEnum.chChartTypeLine;//設定圖表類型
//ChartChartTypeEnum.chChartTypeSmoothLineMarkers
//ChartChartTypeEnum.chChartTypeColumnClustered(垂直柱狀統計圖)
//ChartChartTypeEnum.chChartTypeColumn3D   3D垂直柱狀統計圖
//ChartChartTypeEnum.chChartTypeBarClustered(水平柱狀統計圖)
//ChartChartTypeEnum.chChartTypeBar3D        3D水平柱狀統計圖
//ChartChartTypeEnum.chChartTypeArea(區域統計圖)
//ChartChartTypeEnum.chChartTypeArea3D       3D區域統計圖
//ChartChartTypeEnum.chChartTypeDoughnut(中空餅圖)
//ChartChartTypeEnum.chChartTypeLineStacked(折線統計圖)
//ChartChartTypeEnum.chChartTypeLine3D      3D折線統計圖
//ChartChartTypeEnum.chChartTypeLineMarkers(折線帶點統計圖)
//ChartChartTypeEnum.chChartTypePie(餅圖)
//ChartChartTypeEnum.chChartTypePie3D    3D餅圖
//ChartChartTypeEnum.chChartTypeRadarSmoothLine(網狀統計圖)
//ChartChartTypeEnum.chChartTypeSmoothLine(弧線統計圖)

objChart.HasLegend = true;//設定顯示圖例
objChart.HasTitle = true;//設定顯示抬頭
objChart.Title.Caption = "數量統計";//設定抬頭文字
objChart.Axes[0].HasTitle = true;//設定顯示x軸抬頭
objChart.Axes[0].Title.Caption = "月份";//設定X軸抬頭文字
objChart.Axes[1].HasTitle = true;//設定顯示y軸抬頭
objChart.Axes[1].Title.Caption = "個";//設定顯示y軸抬頭
objChart.SeriesCollection.Add(0);//新增一筆資料
objChart.SeriesCollection[0].SetData(ChartDimensionsEnum.chDimSeriesNames,
+(int)ChartSpecialDataSourcesEnum.chDataLiteral, "3C");//設定資料來源的名稱及,及數列資列類別

objChart.SeriesCollection[0].SetData(ChartDimensionsEnum.chDimCategories,
+(int)ChartSpecialDataSourcesEnum.chDataLiteral,
"Jan" + '\t' + "Feb" + '\t' + "Mar" + '\t' + "Apr" + '\t' + "May" + '\t' + "Jun" + '\t');//設定資料X軸的資料
Random r = new Random(DateTime.Now.Second);//利用亂數先取數值資料,以產生數列
string w1 = r.Next(300).ToString();//利用next方法產生數字後,再用toString()設成字串
string w2 = r.Next(300).ToString();
string w3 = r.Next(300).ToString();
string w4 = r.Next(300).ToString();
string w5 = r.Next(300).ToString();
string w6 = r.Next(300).ToString();
objChart.SeriesCollection[0].SetData(ChartDimensionsEnum.chDimValues,
(int)ChartSpecialDataSourcesEnum.chDataLiteral,
w1 + '\t' + w2 + '\t' + w3 + '\t' + w4 + '\t' + w5 + '\t' + w6 + '\t');//在繪圖區上標上資料

//重覆再新增一組資料
objChart.SeriesCollection.Add(1);
objChart.SeriesCollection[1].SetData(ChartDimensionsEnum.chDimSeriesNames,
+(int)ChartSpecialDataSourcesEnum.chDataLiteral, "Daily Needs");

objChart.SeriesCollection[1].SetData(ChartDimensionsEnum.chDimCategories,
+(int)ChartSpecialDataSourcesEnum.chDataLiteral,
"Jan" + '\t' + "Feb" + '\t' + "Mar" + '\t' + "Apr" + '\t' + "May" + '\t' + "Jun" + '\t');
string b1 = r.Next(300).ToString();
string b2 = r.Next(300).ToString();
string b3 = r.Next(300).ToString();
string b4 = r.Next(300).ToString();
string b5 = r.Next(300).ToString();
string b6 = r.Next(300).ToString();

objChart.SeriesCollection[1].SetData(ChartDimensionsEnum.chDimValues,
(int)ChartSpecialDataSourcesEnum.chDataLiteral,
b1 + '\t' + b2 + '\t' + b3 + '\t' + b4 + '\t' + b5 + '\t' + b6 + '\t');
}
catch (Exception ex)
{
timer1.Enabled = false;
MessageBox.Show(ex.Message);
}

此外,值得注意的是
在vs2005的版本裡,引用owc元件是使用
//引用OWC命名空間,2005用using Microsoft.Office.Interop.Owc11;
而在VS2008中則是
using OWC11;

是不同的哦!
以下這段是給外國朋友看的…英文不好請見諒

All these years, I’ve find and learn many computer program skill from the foreign website!
And Now I try to feedback on internet!

if you want to use owc11 component in visual studio 2005 or 2008.
First you must find owc11 in your office 2003 cd-rom pack!
or you can find the link above, then follow the step!

And I’ve post 2 example on this article ,one for vb, the other for C#!

My English is not good enough to write so much word for the tuition!

Enjoy!