用OWC做统计图总结.docx
《用OWC做统计图总结.docx》由会员分享,可在线阅读,更多相关《用OWC做统计图总结.docx(9页珍藏版)》请在冰豆网上搜索。
用OWC做统计图总结
最近做项目要对数据进行统计分析,所以做一些统计图,首先想到了微软的owc,同时自己把owc的操作封装了一下。
在程序里调用里方便的多。
先看一下效果图:
在使用该类前当然首先要引用一下owc的dll啦!
公布源码:
usingSystem;
usingSystem.Data;
usingSystem.Text;
usingMicrosoft.Office.Interop;
namespaceOWCChartTest
{
///
///利用OWC11进行作统计图的封装类。
///李天平2005-8-31
///
publicclassOWCChart11
{
#region属性
privatestring_phaysicalimagepath;
privatestring_title;
privatestring_seriesname;
privateint_picwidth;
privateint_pichight;
privateDataTable_datasource;
privatestringstrCategory;
privatestringstrValue;
///
///图片存放路径
///
publicstringPhaysicalImagePath
{
set{_phaysicalimagepath=value;}
get{return_phaysicalimagepath;}
}
publicstringTitle
{
set{_title=value;}
get{return_title;}
}
publicstringSeriesName
{
set{_seriesname=value;}
get{return_seriesname;}
}
publicintPicWidth
{
set{_picwidth=value;}
get{return_picwidth;}
}
publicintPicHight
{
set{_pichight=value;}
get{return_pichight;}
}
publicDataTableDataSource
{
set
{
_datasource=value;
strCategory=GetColumnsStr(_datasource);
strValue=GetValueStr(_datasource);
}
get{return_datasource;}
}
privatestringGetColumnsStr(DataTabledt)
{
StringBuilderstrList=newStringBuilder();
foreach(DataRowrindt.Rows)
{
strList.Append(r[0].ToString()+'\t');
}
returnstrList.ToString();
}
privatestringGetValueStr(DataTabledt)
{
StringBuilderstrList=newStringBuilder();
foreach(DataRowrindt.Rows)
{
strList.Append(r[1].ToString()+'\t');
}
returnstrList.ToString();
}
#endregion
publicOWCChart11()
{
}
publicOWCChart11(stringPhaysicalImagePath,stringTitle,stringSeriesName)
{
_phaysicalimagepath=PhaysicalImagePath;
_title=Title;
_seriesname=SeriesName;
}
///
///柱形图
///
///
publicstringCreateColumn()
{
Microsoft.Office.Interop.Owc11.ChartSpaceobjCSpace=newMicrosoft.Office.Interop.Owc11.ChartSpaceClass();//创建ChartSpace对象来放置图表
Microsoft.Office.Interop.Owc11.ChChartobjChart =objCSpace.Charts.Add(0);//在ChartSpace对象中添加图表,Add方法返回chart对象
//指定图表的类型。
类型由OWC.ChartChartTypeEnum枚举值得到//Microsoft.Office.Interop.OWC.ChartChartTypeEnum
objChart.Type=Microsoft.Office.Interop.Owc11.ChartChartTypeEnum.chChartTypeColumnClustered;
//指定图表是否需要图例
objChart.HasLegend=true;
//标题
objChart.HasTitle=true;
objChart.Title.Caption=_title;
// objChart.Title.Font.Bold=true;
// objChart.Title.Font.Color="blue";
#region样式设置
//旋转
// objChart.Rotation =360;//表示指定三维图表的旋转角度
// objChart.Inclination=10;//表示指定三维图表的视图斜率。
有效范围为-90到90
//背景颜色
// objChart.PlotArea.Interior.Color="red";
//底座颜色
// objChart.PlotArea.Floor.Interior.Color="green";
//
// objChart.Overlap=50;//单个类别中标志之间的重叠量
#endregion
//x,y轴的图示说明
objChart.Axes[0].HasTitle=true;
objChart.Axes[0].Title.Caption="X:
类别";
objChart.Axes[1].HasTitle=true;
objChart.Axes[1].Title.Caption="Y:
数量";
//添加一个series
Microsoft.Office.Interop.Owc11.ChSeriesThisChSeries=objChart.SeriesCollection.Add(0);
//给定series的名字
ThisChSeries.SetData(Microsoft.Office.Interop.Owc11.ChartDimensionsEnum.chDimSeriesNames,
Microsoft.Office.Interop.Owc11.ChartSpecialDataSourcesEnum.chDataLiteral.GetHashCode(),SeriesName);
//给定分类
ThisChSeries.SetData(Microsoft.Office.Interop.Owc11.ChartDimensionsEnum.chDimCategories,
Microsoft.Office.Interop.Owc11.ChartSpecialDataSourcesEnum.chDataLiteral.GetHashCode(),strCategory);
//给定值
ThisChSeries.SetData(Microsoft.Office.Interop.Owc11.ChartDimensionsEnum.chDimValues,
Microsoft.Office.Interop.Owc11.ChartSpecialDataSourcesEnum.chDataLiteral.GetHashCode(),strValue);
Microsoft.Office.Interop.Owc11.ChDataLabelsdl=objChart.SeriesCollection[0].DataLabelsCollection.Add();
dl.HasValue=true;
// dl.Position=Microsoft.Office.Interop.Owc11.ChartDataLabelPositionEnum.chLabelPositionOutsideEnd;
stringfilename=DateTime.Now.ToString("yyyyMMddHHmmssff")+".gif";
stringstrAbsolutePath=_phaysicalimagepath+"\\"+filename;
objCSpace.ExportPicture(strAbsolutePath,"GIF",_picwidth,_pichight);//输出成GIF文件.
returnfilename;
}
///
///饼图
///
///
publicstringCreatePie()
{
Microsoft.Office.Interop.Owc11.ChartSpaceobjCSpace=newMicrosoft.Office.Interop.Owc11.ChartSpaceClass();//创建ChartSpace对象来放置图表
Microsoft.Office.Interop.Owc11.ChChartobjChart =objCSpace.Charts.Add(0);//在ChartSpace对象中添加图表,Add方法返回chart对象
//指定图表的类型
objChart.Type=Microsoft.Office.Interop.Owc11.ChartChartTypeEnum.chChartTypePie;
//指定图表是否需要图例
objChart.HasLegend=true;
//标题
objChart.HasTitle=true;
objChart.Title.Caption=_title;
//添加一个series
Microsoft.Office.Interop.Owc11.ChSeriesThisChSeries=objChart.SeriesCollection.Add(0);
//给定series的名字
ThisChSeries.SetData(Microsoft.Office.Interop.Owc11.ChartDimensionsEnum.chDimSeriesNames,
Microsoft.Office.Interop.Owc11.ChartSpecialDataSourcesEnum.chDataLiteral.GetHashCode(),SeriesName);
//给定分类
ThisChSeries.SetData(Microsoft.Office.Interop.Owc11.ChartDimensionsEnum.chDimCategories,
Microsoft.Office.Interop.Owc11.ChartSpecialDataSourcesEnum.chDataLiteral.GetHashCode(),strCategory);
//给定值
ThisChSeries.SetData(Microsoft.Office.Interop.Owc11.ChartDimensionsEnum.chDimValues,
Microsoft.Office.Interop.Owc11.ChartSpecialDataSourcesEnum.chDataLiteral.GetHashCode(),strValue);
//表示系列或趋势线上的单个数据标志
Microsoft.Office.Interop.Owc11.ChDataLabelsdl=objChart.SeriesCollection[0].DataLabelsCollection.Add();
dl.HasValue=true;
dl.HasPercentage=true;
//图表绘图区的图例放置在右侧。
// dl.Position=Microsoft.Office.Interop.Owc11.ChartDataLabelPositionEnum.chLabelPositionRight;
stringfilename=DateTime.Now.Ticks.ToString()+".gif";
stringstrAbsolutePath=_phaysicalimagepath+"\\"+filename;
objCSpace.ExportPicture(strAbsolutePath,"GIF",_picwidth,_pichight);//输出成GIF文件.
returnfilename;
}
///
///条形图
///
///
publicstringCreateBar()
{
Microsoft.Office.Interop.Owc11.ChartSpaceobjCSpace=newMicrosoft.Office.Interop.Owc11.ChartSpaceClass();//创建ChartSpace对象来放置图表
Microsoft.Office.Interop.Owc11.ChChartobjChart =objCSpace.Charts.Add(0);//在ChartSpace对象中添加图表,Add方法返回chart对象
//指定图表的类型。
类型由OWC.ChartChartTypeEnum枚举值得到//Microsoft.Office.Interop.OWC.ChartChartTypeEnum
objChart.Type=Microsoft.Office.Interop.Owc11.ChartChartTypeEnum.chChartTypeBarClustered;
//指定图表是否需要图例
objChart.HasLegend=true;
//标题
objChart.HasTitle=true;
objChart.Title.Caption=_title;
// objChart.Title.Font.Bold=true;
// objChart.Title.Font.Color="blue";
#region样式设置
// //旋转
// objChart.Rotation =360;//表示指定三维图表的旋转角度
// objChart.Inclination=10;//表示指定三维图表的视图斜率。
有效范围为-90到90
//背景颜色
// objChart.PlotArea.Interior.Color="red";
//底座颜色
// objChart.PlotArea.Floor.Interior.Color="green";
//
// objChart.Overlap=50;//单个类别中标志之间的重叠量
#endregion
//x,y轴的图示说明
objChart.Axes[0].HasTitle=true;
objChart.Axes[0].Title.Caption="X:
类别";
objChart.Axes[1].HasTitle=true;
objChart.Axes[1].Title.Caption="Y:
数量";
//添加一个series
Microsoft.Office.Interop.Owc11.ChSeriesThisChSeries=objChart.SeriesCollection.Add(0);
//给定series的名字
ThisChSeries.SetData(Microsoft.Office.Interop.Owc11.ChartDimensionsEnum.chDimSeriesNames,
Microsoft.Office.Interop.Owc11.ChartSpecialDataSourcesEnum.chDataLiteral.GetHashCode(),SeriesName);
//给定分类
ThisChSeries.SetData(Microsoft.Office.Interop.Owc11.ChartDimensionsEnum.chDimCategories,
Microsoft.Office.Interop.Owc11.ChartSpecialDataSourcesEnum.chDataLiteral.GetHashCode(),strCategory);
//给定值
ThisChSeries.SetData(Microsoft.Office.Interop.Owc11.ChartDimensionsEnum.chDimValues,
Microsoft.Office.Interop.Owc11.ChartSpecialDataSourcesEnum.chDataLiteral.GetHashCode(),strValue);
Microsoft.Office.Interop.Owc11.ChDataLabelsdl=objChart.SeriesCollection[0].DataLabelsCollection.Add();
dl.HasValue=true;
// dl.Position=Microsoft.Office.Interop.Owc11.ChartDataLabelPositionEnum.chLabelPositionOutsideEnd;
stringfilename=DateTime.Now.ToString("yyyyMMddHHmmssff")+".gif";
stringstrAbsolutePath=_phaysicalimagepath+"\\"+filename;
objCSpace.ExportPicture(strAbsolutePath,"GIF",_picwidth,_pichight);//输出成GIF文件.
returnfilename;
}
}
}
在要显示统计图的页面代码直接调用就可以了
OWCChart11chart=newOWCChart11();
chart.Title="标题";
chart.SeriesName="图例";
stringfilepath=Server.MapPath(".")+"\\ChartImages";
chart.PhaysicalImagePath=filepath;
chart.PicHight=320;
chart.PicWidth=500;
chart.DataSource=GetData();//这是你的数据源
this.Image1.ImageUrl=filepath+"\\"+chart.CreateBar();//显示给图像控件。