先看一下效果圖:
在使用該類前當(dāng)然首先要引用一下owc的dll啦!
公布源碼:
using System;
using System.Data;
using System.Text;
using Microsoft.Office.Interop;
namespace OWCChartTest
{
/// <summary>
/// 利用OWC11進(jìn)行作統(tǒng)計(jì)圖的封裝類。
/// 李天平 2005-8-31
/// </summary>
public class OWCChart11
{
#region 屬性
private string _phaysicalimagepath;
private string _title;
private string _seriesname;
private int _picwidth;
private int _pichight;
private DataTable _datasource;
private string strCategory;
private string strValue;
/// <summary>
/// 圖片存放路徑
/// </summary>
public string PhaysicalImagePath
{
set{_phaysicalimagepath=value;}
get{return _phaysicalimagepath;}
}
public string Title
{
set{_title=value;}
get{return _title;}
}
public string SeriesName
{
set{_seriesname=value;}
get{return _seriesname;}
}
public int PicWidth
{
set{_picwidth=value;}
get{return _picwidth;}
}
public int PicHight
{
set{_pichight=value;}
get{return _pichight;}
}
public DataTable DataSource
{
set
{
_datasource=value;
strCategory=GetColumnsStr(_datasource);
strValue=GetValueStr(_datasource);
}
get{return _datasource;}
}
private string GetColumnsStr(DataTable dt)
{
StringBuilder strList=new StringBuilder();
foreach(DataRow r in dt.Rows)
{
strList.Append(r[0].ToString()+'\t');
}
return strList.ToString();
}
private string GetValueStr(DataTable dt)
{
StringBuilder strList=new StringBuilder();
foreach(DataRow r in dt.Rows)
{
strList.Append(r[1].ToString()+'\t');
}
return strList.ToString();
}
#endregion
public OWCChart11()
{
}
public OWCChart11(string PhaysicalImagePath,string Title,string SeriesName)
{
_phaysicalimagepath=PhaysicalImagePath;
_title=Title;
_seriesname=SeriesName;
}
/// <summary>
/// 柱形圖
/// </summary>
/// <returns></returns>
public string CreateColumn()
{
Microsoft.Office.Interop.Owc11.ChartSpace objCSpace = new Microsoft.Office.Interop.Owc11.ChartSpaceClass();//創(chuàng)建ChartSpace對(duì)象來(lái)放置圖表
Microsoft.Office.Interop.Owc11.ChChart objChart = objCSpace.Charts.Add(0);//在ChartSpace對(duì)象中添加圖表,Add方法返回chart對(duì)象
//指定圖表的類型。類型由OWC.ChartChartTypeEnum枚舉值得到//Microsoft.Office.Interop.OWC.ChartChartTypeEnum
objChart.Type=Microsoft.Office.Interop.Owc11.ChartChartTypeEnum.chChartTypeColumnClustered;
//指定圖表是否需要圖例
objChart.HasLegend = true;
//標(biāo)題
objChart.HasTitle = true;
objChart.Title.Caption= _title;
// objChart.Title.Font.Bold=true;
// objChart.Title.Font.Color="blue";
#region 樣式設(shè)置
//旋轉(zhuǎn)
// objChart.Rotation = 360;//表示指定三維圖表的旋轉(zhuǎn)角度
// objChart.Inclination = 10;//表示指定三維圖表的視圖斜率。有效范圍為 -90 到 90
//背景顏色
// objChart.PlotArea.Interior.Color = "red";
//底座顏色
// objChart.PlotArea.Floor.Interior.Color = "green";
//
// objChart.Overlap = 50;//單個(gè)類別中標(biāo)志之間的重疊量
#endregion
//x,y軸的圖示說(shuō)明
objChart.Axes[0].HasTitle = true;
objChart.Axes[0].Title.Caption = "X : 類別";
objChart.Axes[1].HasTitle = true;
objChart.Axes[1].Title.Caption = "Y : 數(shù)量";
//添加一個(gè)series
Microsoft.Office.Interop.Owc11.ChSeries ThisChSeries = 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.ChDataLabels dl=objChart.SeriesCollection[0].DataLabelsCollection.Add();
dl.HasValue=true;
// dl.Position=Microsoft.Office.Interop.Owc11.ChartDataLabelPositionEnum.chLabelPositionOutsideEnd;
string filename=DateTime.Now.ToString("yyyyMMddHHmmssff")+".gif";
string strAbsolutePath = _phaysicalimagepath + "\\"+filename;
objCSpace.ExportPicture(strAbsolutePath, "GIF", _picwidth, _pichight);//輸出成GIF文件.
return filename;
}
/// <summary>
/// 餅圖
/// </summary>
/// <returns></returns>
public string CreatePie()
{
Microsoft.Office.Interop.Owc11.ChartSpace objCSpace = new Microsoft.Office.Interop.Owc11.ChartSpaceClass();//創(chuàng)建ChartSpace對(duì)象來(lái)放置圖表
Microsoft.Office.Interop.Owc11.ChChart objChart = objCSpace.Charts.Add(0);//在ChartSpace對(duì)象中添加圖表,Add方法返回chart對(duì)象
//指定圖表的類型
objChart.Type=Microsoft.Office.Interop.Owc11.ChartChartTypeEnum.chChartTypePie;
//指定圖表是否需要圖例
objChart.HasLegend = true;
//標(biāo)題
objChart.HasTitle = true;
objChart.Title.Caption= _title;
//添加一個(gè)series
Microsoft.Office.Interop.Owc11.ChSeries ThisChSeries = 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);
//表示系列或趨勢(shì)線上的單個(gè)數(shù)據(jù)標(biāo)志
Microsoft.Office.Interop.Owc11.ChDataLabels dl=objChart.SeriesCollection[0].DataLabelsCollection.Add();
dl.HasValue=true;
dl.HasPercentage=true;
//圖表繪圖區(qū)的圖例放置在右側(cè)。
// dl.Position=Microsoft.Office.Interop.Owc11.ChartDataLabelPositionEnum.chLabelPositionRight;
string filename=DateTime.Now.Ticks.ToString()+".gif";
string strAbsolutePath = _phaysicalimagepath + "\\"+filename;
objCSpace.ExportPicture(strAbsolutePath, "GIF", _picwidth, _pichight);//輸出成GIF文件.
return filename;
}
/// <summary>
/// 條形圖
/// </summary>
/// <returns></returns>
public string CreateBar()
{
Microsoft.Office.Interop.Owc11.ChartSpace objCSpace = new Microsoft.Office.Interop.Owc11.ChartSpaceClass();//創(chuàng)建ChartSpace對(duì)象來(lái)放置圖表
Microsoft.Office.Interop.Owc11.ChChart objChart = objCSpace.Charts.Add(0);//在ChartSpace對(duì)象中添加圖表,Add方法返回chart對(duì)象
//指定圖表的類型。類型由OWC.ChartChartTypeEnum枚舉值得到//Microsoft.Office.Interop.OWC.ChartChartTypeEnum
objChart.Type=Microsoft.Office.Interop.Owc11.ChartChartTypeEnum.chChartTypeBarClustered;
//指定圖表是否需要圖例
objChart.HasLegend = true;
//標(biāo)題
objChart.HasTitle = true;
objChart.Title.Caption= _title;
// objChart.Title.Font.Bold=true;
// objChart.Title.Font.Color="blue";
#region 樣式設(shè)置
// //旋轉(zhuǎn)
// objChart.Rotation = 360;//表示指定三維圖表的旋轉(zhuǎn)角度
// objChart.Inclination = 10;//表示指定三維圖表的視圖斜率。有效范圍為 -90 到 90
//背景顏色
// objChart.PlotArea.Interior.Color = "red";
//底座顏色
// objChart.PlotArea.Floor.Interior.Color = "green";
//
// objChart.Overlap = 50;//單個(gè)類別中標(biāo)志之間的重疊量
#endregion
//x,y軸的圖示說(shuō)明
objChart.Axes[0].HasTitle = true;
objChart.Axes[0].Title.Caption = "X : 類別";
objChart.Axes[1].HasTitle = true;
objChart.Axes[1].Title.Caption = "Y : 數(shù)量";
//添加一個(gè)series
Microsoft.Office.Interop.Owc11.ChSeries ThisChSeries = 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.ChDataLabels dl=objChart.SeriesCollection[0].DataLabelsCollection.Add();
dl.HasValue=true;
// dl.Position=Microsoft.Office.Interop.Owc11.ChartDataLabelPositionEnum.chLabelPositionOutsideEnd;
string filename=DateTime.Now.ToString("yyyyMMddHHmmssff")+".gif";
string strAbsolutePath = _phaysicalimagepath + "\\"+filename;
objCSpace.ExportPicture(strAbsolutePath, "GIF", _picwidth, _pichight);//輸出成GIF文件.
return filename;
}
}
}
在要顯示統(tǒng)計(jì)圖的頁(yè)面代碼直接調(diào)用就可以了
OWCChart11 chart=new OWCChart11();
chart.Title="標(biāo)題";
chart.SeriesName="圖例";
string filepath=Server.MapPath(".")+"\\ChartImages";
chart.PhaysicalImagePath=filepath;
chart.PicHight=320;
chart.PicWidth=500;
chart.DataSource=GetData();//這是你的數(shù)據(jù)源
this.Image1.ImageUrl=filepath+"\\"+chart.CreateBar();//顯示給圖像控件。
聯(lián)系客服