微软的owc11控件,owc11控件是microsoft office 图表控件(owc10为ofiiceXP的组件、owc11为office2003的组件,组件的路径为C:\Program Files\Common Files\Microsoft Shared\Web Components\11\owc11,帮助文件的路径为C:\Program Files\Common Files\Microsoft Shared\Web Components\11\2052),调用它可以生成三维图、柱状图、饼状图、趋势图和误差图等。

首先必须添加引用owc11:在“com选项卡”中选择“misrosoft office 11.0 object library”或直接选择路径为C:\Program Files\Common Files\Microsoft Shared\Web Components\11\owc11的owc11;

接下来是对
owc11操作的封装类,以便于在程序里调用。


1None.gifusing System;
2None.gifusing System.Data;
3None.gifusing System.Text;
4None.gifusing Microsoft.Office.Interop.Owc11;
5None.gif
6None.gifnamespace FLX.ComplexQuery
7ExpandedBlockStart.gif{
8ExpandedSubBlockStart.gif///<summary>
9InBlock.gif/// 彭建军
10InBlock.gif/// 根据数据动态生成图形(柱形图、饼图、曲线图)
11InBlock.gif/// 2008-06-19
12ExpandedSubBlockEnd.gif///</summary>

13InBlock.gifpublicclass ShowChart
14ExpandedSubBlockStart.gif{
15ExpandedSubBlockStart.gif#region 属性
16InBlock.gifprivatestring _phaysicalp_w_picpathpath;//图片存放路径
17InBlock.gifprivatestring _title; //图片标题
18InBlock.gifprivatestring _xtitle;//图片x座标名称
19InBlock.gifprivatestring _ytitle;//图片y座标名称
20InBlock.gifprivatestring _seriesname;//图例名称
21InBlock.gifprivateint _picwidth;//图片宽度
22InBlock.gifprivateint _pichight;//图片高度
23InBlock.gifprivate DataTable _datasource;//图片数据源
24InBlock.gifprivatestring strCategory;//图片数据源的分类
25InBlock.gifprivatestring strValue;//图片数据源的值
26InBlock.gif
27ExpandedSubBlockStart.gif///<summary>
28InBlock.gif/// 图片存放路径
29ExpandedSubBlockEnd.gif///</summary>

30InBlock.gifpublicstring PhaysicalImagePath
31ExpandedSubBlockStart.gif{
32ExpandedSubBlockStart.gifset{_phaysicalp_w_picpathpath=value;}
33ExpandedSubBlockStart.gifget{return _phaysicalp_w_picpathpath;}
34ExpandedSubBlockEnd.gif }

35ExpandedSubBlockStart.gif///<summary>
36InBlock.gif/// 图片标题
37ExpandedSubBlockEnd.gif///</summary>

38InBlock.gifpublicstring Title
39ExpandedSubBlockStart.gif{
40ExpandedSubBlockStart.gifset{_title=value;}
41ExpandedSubBlockStart.gifget{return _title;}
42ExpandedSubBlockEnd.gif }

43ExpandedSubBlockStart.gif///<summary>
44InBlock.gif/// 图片标题
45ExpandedSubBlockEnd.gif///</summary>

46InBlock.gifpublicstring XTitle
47ExpandedSubBlockStart.gif{
48ExpandedSubBlockStart.gifset{_xtitle=value;}
49ExpandedSubBlockStart.gifget{return _xtitle;}
50ExpandedSubBlockEnd.gif }

51ExpandedSubBlockStart.gif///<summary>
52InBlock.gif/// 图片标题
53ExpandedSubBlockEnd.gif///</summary>

54InBlock.gifpublicstring YTitle
55ExpandedSubBlockStart.gif{
56ExpandedSubBlockStart.gifset{_ytitle=value;}
57ExpandedSubBlockStart.gifget{return _ytitle;}
58ExpandedSubBlockEnd.gif }

59InBlock.gif
60ExpandedSubBlockStart.gif///<summary>
61InBlock.gif/// 图例名称
62ExpandedSubBlockEnd.gif///</summary>

63InBlock.gifpublicstring SeriesName
64ExpandedSubBlockStart.gif{
65ExpandedSubBlockStart.gifset{_seriesname=value;}
66ExpandedSubBlockStart.gifget{return _seriesname;}
67ExpandedSubBlockEnd.gif }

68ExpandedSubBlockStart.gif///<summary>
69InBlock.gif/// 图片宽度
70ExpandedSubBlockEnd.gif///</summary>

71InBlock.gifpublicint PicWidth
72ExpandedSubBlockStart.gif{
73ExpandedSubBlockStart.gifset{_picwidth=value;}
74ExpandedSubBlockStart.gifget{return _picwidth;}
75ExpandedSubBlockEnd.gif }

76ExpandedSubBlockStart.gif///<summary>
77InBlock.gif/// 图片高度
78ExpandedSubBlockEnd.gif///</summary>

79InBlock.gifpublicint PicHight
80ExpandedSubBlockStart.gif{
81ExpandedSubBlockStart.gifset{_pichight=value;}
82ExpandedSubBlockStart.gifget{return _pichight;}
83ExpandedSubBlockEnd.gif }

84ExpandedSubBlockStart.gif///<summary>
85InBlock.gif/// 图片数据源
86ExpandedSubBlockEnd.gif///</summary>

87InBlock.gifpublic DataTable DataSource
88ExpandedSubBlockStart.gif{
89InBlock.gifset
90ExpandedSubBlockStart.gif{
91InBlock.gif _datasource=value;
92InBlock.gif strCategory=GetColumnsStr(_datasource);
93InBlock.gif strValue=GetValueStr(_datasource);
94ExpandedSubBlockEnd.gif }

95ExpandedSubBlockStart.gifget{return _datasource;}
96ExpandedSubBlockEnd.gif }

97ExpandedSubBlockStart.gif///<summary>
98InBlock.gif/// 图片数据源的分类
99ExpandedSubBlockEnd.gif///</summary>

100InBlock.gifprivatestring GetColumnsStr(DataTable dt)
101ExpandedSubBlockStart.gif{
102InBlock.gif StringBuilder strList=new StringBuilder();
103InBlock.gifforeach(DataRow r in dt.Rows)
104ExpandedSubBlockStart.gif{
105InBlock.gif strList.Append(r[0].ToString()+'\t');
106ExpandedSubBlockEnd.gif }

107InBlock.gifreturn strList.ToString();
108ExpandedSubBlockEnd.gif }

109ExpandedSubBlockStart.gif///<summary>
110InBlock.gif/// 图片数据源的值
111ExpandedSubBlockEnd.gif///</summary>

112InBlock.gifprivatestring GetValueStr(DataTable dt)
113ExpandedSubBlockStart.gif{
114InBlock.gif StringBuilder strList=new StringBuilder();
115InBlock.gifforeach(DataRow r in dt.Rows)
116ExpandedSubBlockStart.gif{
117InBlock.gif strList.Append(r[1].ToString()+'\t');
118ExpandedSubBlockEnd.gif }

119InBlock.gifreturn strList.ToString();
120ExpandedSubBlockEnd.gif }

121InBlock.gif
122ExpandedSubBlockEnd.gif#endregion

123InBlock.gif
124ExpandedSubBlockStart.gif#region 构造函数
125InBlock.gifpublic ShowChart()
126ExpandedSubBlockStart.gif{
127InBlock.gif//
128InBlock.gif// TODO: 在此处添加构造函数逻辑
129InBlock.gif//
130ExpandedSubBlockEnd.gif }

131InBlock.gif
132InBlock.gifpublic ShowChart(string PhaysicalImagePath,string Title,string XTitle,string YTitle,string SeriesName)
133ExpandedSubBlockStart.gif{
134InBlock.gif _phaysicalp_w_picpathpath=PhaysicalImagePath;
135InBlock.gif _title=Title;
136InBlock.gif _xtitle=XTitle;
137InBlock.gif _ytitle=YTitle;
138InBlock.gif _seriesname=SeriesName;
139ExpandedSubBlockEnd.gif }

140ExpandedSubBlockEnd.gif#endregion

141InBlock.gif
142ExpandedSubBlockStart.gif#region 输出柱形图
143ExpandedSubBlockStart.gif///<summary>
144InBlock.gif/// 柱形图
145InBlock.gif///</summary>
146ExpandedSubBlockEnd.gif///<returns></returns>

147InBlock.gifpublicstring CreateColumn()
148ExpandedSubBlockStart.gif{
149InBlock.gif Microsoft.Office.Interop.Owc11.ChartSpace objCSpace =new Microsoft.Office.Interop.Owc11.ChartSpaceClass();//创建ChartSpace对象来放置图表
150InBlock.gif Microsoft.Office.Interop.Owc11.ChChart objChart = objCSpace.Charts.Add(0);//在ChartSpace对象中添加图表,Add方法返回chart对象
151InBlock.gif
152InBlock.gif//指定图表的类型。类型由OWC.ChartChartTypeEnum枚举值得到//Microsoft.Office.Interop.OWC.ChartChartTypeEnum
153InBlock.gif objChart.Type=Microsoft.Office.Interop.Owc11.ChartChartTypeEnum.chChartTypeColumnClustered;
154InBlock.gif
155InBlock.gif//指定图表是否需要图例
156InBlock.gif objChart.HasLegend =true;
157InBlock.gif
158InBlock.gif//标题
159InBlock.gif objChart.HasTitle =true;
160InBlock.gif objChart.Title.Caption= _title;
161InBlock.gif// objChart.Title.Font.Bold=true;
162InBlock.gif// objChart.Title.Font.Color="blue";
163InBlock.gif
164InBlock.gif
165ContractedSubBlock.gif样式设置
180InBlock.gif
181InBlock.gif//x,y轴的图示说明
182InBlock.gif objChart.Axes[0].HasTitle =true;
183InBlock.gif objChart.Axes[0].Title.Caption ="X : "+this._xtitle;
184InBlock.gif objChart.Axes[1].HasTitle =true;
185InBlock.gif objChart.Axes[1].Title.Caption ="Y : "+this._ytitle;
186InBlock.gif
187InBlock.gif
188InBlock.gif//添加一个series
189InBlock.gif Microsoft.Office.Interop.Owc11.ChSeries ThisChSeries = objChart.SeriesCollection.Add(0);
190InBlock.gif
191InBlock.gif
192InBlock.gif//给定series的名字
193InBlock.gif ThisChSeries.SetData(Microsoft.Office.Interop.Owc11.ChartDimensionsEnum.chDimSeriesNames,
194InBlock.gif Microsoft.Office.Interop.Owc11.ChartSpecialDataSourcesEnum.chDataLiteral.GetHashCode(),SeriesName);
195InBlock.gif//给定分类
196InBlock.gif ThisChSeries.SetData(Microsoft.Office.Interop.Owc11.ChartDimensionsEnum.chDimCategories,
197InBlock.gif Microsoft.Office.Interop.Owc11.ChartSpecialDataSourcesEnum.chDataLiteral.GetHashCode(),strCategory);
198InBlock.gif//给定值
199InBlock.gif ThisChSeries.SetData(Microsoft.Office.Interop.Owc11.ChartDimensionsEnum.chDimValues,
200InBlock.gif Microsoft.Office.Interop.Owc11.ChartSpecialDataSourcesEnum.chDataLiteral.GetHashCode(),strValue);
201InBlock.gif//表示柱形图上的单个数据标志
202InBlock.gif Microsoft.Office.Interop.Owc11.ChDataLabels dl=objChart.SeriesCollection[0].DataLabelsCollection.Add();
203InBlock.gif dl.HasValue=true;
204InBlock.gif// dl.Position=Microsoft.Office.Interop.Owc11.ChartDataLabelPositionEnum.chLabelPositionOutsideEnd;
205InBlock.gif
206InBlock.gif
207InBlock.gifstring filename=DateTime.Now.ToString("yyyyMMddHHmmssff")+".gif";
208InBlock.gifstring strAbsolutePath = _phaysicalp_w_picpathpath +"\\"+filename;
209InBlock.gif objCSpace.ExportPicture(strAbsolutePath, "GIF", _picwidth, _pichight);//输出成GIF文件.
210InBlock.gif
211InBlock.gifreturn filename;
212InBlock.gif
213ExpandedSubBlockEnd.gif }

214ExpandedSubBlockEnd.gif#endregion

215InBlock.gif
216ExpandedSubBlockStart.gif#region 输出饼图
217ExpandedSubBlockStart.gif///<summary>
218InBlock.gif/// 饼图
219InBlock.gif///</summary>
220ExpandedSubBlockEnd.gif///<returns></returns>

221InBlock.gifpublicstring CreatePie()
222ExpandedSubBlockStart.gif{
223InBlock.gif Microsoft.Office.Interop.Owc11.ChartSpace objCSpace =new Microsoft.Office.Interop.Owc11.ChartSpaceClass();//创建ChartSpace对象来放置图表
224InBlock.gif Microsoft.Office.Interop.Owc11.ChChart objChart = objCSpace.Charts.Add(0);//在ChartSpace对象中添加图表,Add方法返回chart对象
225InBlock.gif
226InBlock.gif
227InBlock.gif//指定图表的类型
228InBlock.gif objChart.Type=Microsoft.Office.Interop.Owc11.ChartChartTypeEnum.chChartTypePie;
229InBlock.gif
230InBlock.gif//指定图表是否需要图例
231InBlock.gif objChart.HasLegend =true;
232InBlock.gif
233InBlock.gif//标题
234InBlock.gif objChart.HasTitle =true;
235InBlock.gif objChart.Title.Caption= _title;
236InBlock.gif
237InBlock.gif
238InBlock.gif//添加一个series
239InBlock.gif Microsoft.Office.Interop.Owc11.ChSeries ThisChSeries = objChart.SeriesCollection.Add(0);
240InBlock.gif
241InBlock.gif//给定series的名字
242InBlock.gif ThisChSeries.SetData(Microsoft.Office.Interop.Owc11.ChartDimensionsEnum.chDimSeriesNames,
243InBlock.gif Microsoft.Office.Interop.Owc11.ChartSpecialDataSourcesEnum.chDataLiteral.GetHashCode(),SeriesName);
244InBlock.gif//给定分类
245InBlock.gif ThisChSeries.SetData(Microsoft.Office.Interop.Owc11.ChartDimensionsEnum.chDimCategories,
246InBlock.gif Microsoft.Office.Interop.Owc11.ChartSpecialDataSourcesEnum.chDataLiteral.GetHashCode(),strCategory);
247InBlock.gif//给定值
248InBlock.gif ThisChSeries.SetData(Microsoft.Office.Interop.Owc11.ChartDimensionsEnum.chDimValues,
249InBlock.gif Microsoft.Office.Interop.Owc11.ChartSpecialDataSourcesEnum.chDataLiteral.GetHashCode(),strValue);
250InBlock.gif
251InBlock.gif
252InBlock.gif//表示系列或趋势线上的单个数据标志
253InBlock.gif Microsoft.Office.Interop.Owc11.ChDataLabels dl=objChart.SeriesCollection[0].DataLabelsCollection.Add();
254InBlock.gif dl.HasValue=true;
255InBlock.gif dl.HasPercentage=true;
256InBlock.gif//图表绘图区的图例放置在右侧。
257InBlock.gif// dl.Position=Microsoft.Office.Interop.Owc11.ChartDataLabelPositionEnum.chLabelPositionRight;
258InBlock.gif
259InBlock.gifstring filename=DateTime.Now.Ticks.ToString()+".gif";
260InBlock.gifstring strAbsolutePath = _phaysicalp_w_picpathpath +"\\"+filename;
261InBlock.gif objCSpace.ExportPicture(strAbsolutePath, "GIF", _picwidth, _pichight);//输出成GIF文件.
262InBlock.gif
263InBlock.gifreturn filename;
264ExpandedSubBlockEnd.gif }

265ExpandedSubBlockEnd.gif#endregion

266InBlock.gif
267ExpandedSubBlockStart.gif#region 输出曲线图
268ExpandedSubBlockStart.gif///<summary>
269InBlock.gif/// 曲线图
270InBlock.gif///</summary>
271ExpandedSubBlockEnd.gif///<returns></returns>

272InBlock.gifpublicstring CreateLine()
273ExpandedSubBlockStart.gif{
274InBlock.gif//创建ChartSpace对象来放置图表
275InBlock.gif Microsoft.Office.Interop.Owc11.ChartSpace objCSpace =new Microsoft.Office.Interop.Owc11.ChartSpaceClass();
276InBlock.gif
277InBlock.gif//在ChartSpace对象中添加图表,Add方法返回chart对象
278InBlock.gif
279InBlock.gif Microsoft.Office.Interop.Owc11.ChChart objChart = objCSpace.Charts.Add (0);
280InBlock.gif objChart.Type = Microsoft.Office.Interop.Owc11.ChartChartTypeEnum.chChartTypeSmoothLine;
281InBlock.gif
282InBlock.gif//指定图表是否需要图例
283InBlock.gif objChart.HasLegend =true;
284InBlock.gif
285InBlock.gif
286InBlock.gif//给定标题
287InBlock.gif objChart.HasTitle =true;
288InBlock.gif objChart.Title.Caption =this._title;
289InBlock.gif
290InBlock.gif//给定x,y轴的图示说明
291InBlock.gif objChart.Axes[0].HasTitle =true;
292InBlock.gif objChart.Axes[0].Title.Caption ="X : "+this._xtitle;
293InBlock.gif objChart.Axes[1].HasTitle =true;
294InBlock.gif objChart.Axes[1].Title.Caption ="Y : "+this._ytitle;
295InBlock.gif
296InBlock.gif
297InBlock.gif//添加一个series
298InBlock.gif objChart.SeriesCollection.Add(0);
299InBlock.gif
300InBlock.gif//给定series的名字
301InBlock.gif objChart.SeriesCollection[0].SetData (Microsoft.Office.Interop.Owc11.ChartDimensionsEnum.chDimSeriesNames,
302InBlock.gif+ (int)Microsoft.Office.Interop.Owc11.ChartSpecialDataSourcesEnum.chDataLiteral, SeriesName);
303InBlock.gif
304InBlock.gif//给定分类
305InBlock.gif objChart.SeriesCollection[0].SetData (Microsoft.Office.Interop.Owc11.ChartDimensionsEnum.chDimCategories,
306InBlock.gif+ (int)Microsoft.Office.Interop.Owc11.ChartSpecialDataSourcesEnum.chDataLiteral, strCategory);
307InBlock.gif
308InBlock.gif//给定值
309InBlock.gif objChart.SeriesCollection[0].SetData(Microsoft.Office.Interop.Owc11.ChartDimensionsEnum.chDimValues,(int)Microsoft.Office.Interop.Owc11.ChartSpecialDataSourcesEnum.chDataLiteral, strValue);
310InBlock.gif//表示曲线上的单个数据标志
311InBlock.gif Microsoft.Office.Interop.Owc11.ChDataLabels dl=objChart.SeriesCollection[0].DataLabelsCollection.Add();
312InBlock.gif dl.HasValue=true;
313InBlock.gif
314InBlock.gifstring filename=DateTime.Now.ToString("yyyyMMddHHmmssff")+".gif";
315InBlock.gifstring strAbsolutePath = _phaysicalp_w_picpathpath +"\\"+filename;
316InBlock.gif objCSpace.ExportPicture(strAbsolutePath, "GIF", _picwidth, _pichight);//输出成GIF文件.
317InBlock.gifreturn filename;
318ExpandedSubBlockEnd.gif }

319ExpandedSubBlockEnd.gif#endregion

320InBlock.gif
321ExpandedSubBlockStart.gif#region 调用说明及范例
322InBlock.gif// 在要显示统计图的页面代码直接调用,方法类似如下:
323InBlock.gif//
324InBlock.gif// ShowChart chart=new ShowChart(); 创建对象
325InBlock.gif// chart.Title="标题";
326InBlock.gif// chart.XTitle ="月份";
327InBlock.gif// chart.YTitle ="数量";
328InBlock.gif// chart.SeriesName="图例";
329InBlock.gif// string filepath=Server.MapPath(".")+"\\ChartImages";
330InBlock.gif// chart.PhaysicalImagePath=filepath;
331InBlock.gif// chart.PicHight=320;
332InBlock.gif// chart.PicWidth=500;
333InBlock.gif// chart.DataSource=GetData();//这是你的数据源
334InBlock.gif// Response.Write("<img src='" +filepath+"\\"+chart.CreateColumn()+"'/>");
335InBlock.gif// this.Image1.ImageUrl=filepath+"\\"+chart.CreateBar();//显示给图像控件。
336ExpandedSubBlockEnd.gif#endregion