using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Data.SqlClient; //添加數據操作引用
using Microsoft.Office.Interop.Owc11;//添加Office組件引用
public partial class owc : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
string ConnectString = "Server=TSETServer;DataBase=SalesStagingDB;Uid=sa;Pwd=******";
string Sql = "SELECT cYear, sum(fTargetOrderRcvAmt), sum(fTargetRevOrderRcvAmt) ";
Sql += " FROM AnnualProjectionByCustomer WITH (NOLOCK) WHERE cCustomerID = 'CSM0000034' AND CONVERT(int, cYear) in(2007,2008,2009) group by cYear ";
SqlConnection myConn = new SqlConnection(ConnectString); myConn.Open();
SqlDataAdapter Da = new SqlDataAdapter(Sql, myConn);
DataSet ds = new DataSet();
Da.Fill(ds);
//存放月
string[] MonNum = new string[12];
//存放数据1
string[] TargetOrderRcvAmt = new string[12];
//存放数据2
string[] TargetRevOrderRcvAmt = new string[12];
//为数组赋值
for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
{
MonNum[i] = ds.Tables[0].Rows[i][0].ToString();
TargetOrderRcvAmt[i] = ds.Tables[0].Rows[i][1].ToString();
TargetRevOrderRcvAmt[i] = ds.Tables[0].Rows[i][2].ToString();
}
//循环取得数据并格式化为OWC11需要的格式,(加'/t')
//为x轴指定特定字符串,以便显示数据
string strXdata = String.Empty;
foreach (string strData in MonNum)
{
strXdata += strData + "/t";
}
string strYdataTargetOrderRcvAmt = String.Empty;
//为y轴指定特定的字符串,以便与x轴相对应
foreach (string strValue in TargetOrderRcvAmt)
{
strYdataTargetOrderRcvAmt += strValue + "/t";
}
string strYdataTargetRevOrderRcvAmt = String.Empty;
//为y轴指定特定的字符串,以便与x轴相对应
foreach (string strValue in TargetRevOrderRcvAmt)
{
strYdataTargetRevOrderRcvAmt += strValue + "/t";
}
//创建ChartSpace对象来放置图表
ChartSpace laySpace = new ChartSpaceClass();
//在ChartSpace对象中添加图表
ChChart InsertChart = laySpace.Charts.Add(0);
//指定绘制图表的类型。类型可以通过OWC.ChartChartTypeEnum枚举值得到
//InsertChart.Type = ChartChartTypeEnum.chChartTypeColumnClustered; //垂直柱状统计图
//InsertChart.Type = ChartChartTypeEnum.chChartTypeColumn3D; //3D垂直柱状统计图
//InsertChart.Type = ChartChartTypeEnum.chChartTypeBarClustered; //水平柱状统计图
InsertChart.Type = ChartChartTypeEnum.chChartTypeBar3D;//3D水平柱状统计图
//InsertChart.Type = ChartChartTypeEnum.chChartTypeArea; //区域统计图
//InsertChart.Type = ChartChartTypeEnum.chChartTypeArea3D; //3D区域统计图
//InsertChart.Type = ChartChartTypeEnum.chChartTypeDoughnut; //中空饼图,不能为x,y轴添加图示说明
//InsertChart.Type = ChartChartTypeEnum.chChartTypeLineStacked; //折线统计图
//InsertChart.Type = ChartChartTypeEnum.chChartTypeLine3D; //3D折线统计图
//InsertChart.Type = ChartChartTypeEnum.chChartTypeLineMarkers; //折线带点统计图
//InsertChart.Type = ChartChartTypeEnum.chChartTypePie; //饼图
//InsertChart.Type = ChartChartTypeEnum.chChartTypePie3D; //3D饼图 ,不能为x,y轴添加图示说明
//InsertChart.Type = ChartChartTypeEnum.chChartTypeRadarSmoothLine; //网状统计图
//InsertChart.Type = ChartChartTypeEnum.chChartTypeSmoothLine;//弧线统计图
//InsertChart.Type = ChartChartTypeEnum.chChartTypePieExploded3D;
//InsertChart.Type = ChartChartTypeEnum.chChartTypePie3D;
//InsertChart.Type = ChartChartTypeEnum.chChartTypeSmoothLineStacked100Markers;
//指定图表是否需要图例标注
InsertChart.HasLegend = true; //圖例格式
InsertChart.HasTitle = true;
//为图表添加标题
InsertChart.Title.Caption = "Client Order Received (Actual vs Target Revised)"; //标题名称
//为x,y轴添加图示说明
InsertChart.Axes[0].HasTitle = true;
InsertChart.Axes[0].Title.Caption = ""; //月份
InsertChart.Axes[1].HasTitle = true;
InsertChart.Axes[1].Scaling.SplitMinimum = 200;
InsertChart.Axes[1].Title.Caption = "";//数量
//聯接數據庫並獲取特殊字符串
string strSeriesName = "TargetOrderRcvAmt";
//添加一个series系列
InsertChart.SeriesCollection.Add(0);
//给定series系列的名字
InsertChart.SeriesCollection[0].SetData(ChartDimensionsEnum.chDimSeriesNames, +(int)ChartSpecialDataSourcesEnum.chDataLiteral, strSeriesName);
//给定分类
InsertChart.SeriesCollection[0].SetData(ChartDimensionsEnum.chDimCategories, +(int)ChartSpecialDataSourcesEnum.chDataLiteral, strXdata);
//给定值
InsertChart.SeriesCollection[0].SetData(ChartDimensionsEnum.chDimValues, (int)ChartSpecialDataSourcesEnum.chDataLiteral, strYdataTargetOrderRcvAmt);
//聯接數據庫並獲取特殊字符串
string strSeriesName2 = "TargetRevOrderRcvAmt";
//添加一个series系列
InsertChart.SeriesCollection.Add(1);
//给定series系列的名字
InsertChart.SeriesCollection[1].SetData(ChartDimensionsEnum.chDimSeriesNames, +(int)ChartSpecialDataSourcesEnum.chDataLiteral, strSeriesName2);
//给定分类
InsertChart.SeriesCollection[1].SetData(ChartDimensionsEnum.chDimCategories, +(int)ChartSpecialDataSourcesEnum.chDataLiteral, strXdata);
//给定值
InsertChart.SeriesCollection[1].SetData(ChartDimensionsEnum.chDimValues, (int)ChartSpecialDataSourcesEnum.chDataLiteral, strYdataTargetRevOrderRcvAmt);
//输出文件.
string strAbsolutePath = (Server.MapPath(".")) + @"//ShowData.gif";
laySpace.ExportPicture(strAbsolutePath, "GIF",500, 400);
//创建GIF文件的相对路径.
string strRelativePath = "./ShowData.gif";
//把图片添加到placeholder中,并在页面上显示
this.PlaceHolder1.Controls.Add(new LiteralControl("<img src=" + strRelativePath + ">"));
//或者 把图片添加到Image
//Image1.ImageUrl = strRelativePath;
}
------------------------------------------------------------------------------
OWC11统计图C#封装类(以下轉)
------------------------------------------------------------------
using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using Microsoft.Office.Interop;
namespace JWD.Common
{
/// <summary>
/// OWC11统计图封装
/// 金伟达 2006-04-26
/// </summary>
public class OWCChart11
{
#region 属性
/// <summary>
/// 属性
/// </summary>
private string _title;
private string _imagepath;
private int _imgwidth;
private int _imgheight;
private string _seriesname;
private string strCatory;
private string strValue;
private DataTable _datasource;
private string _name;
public string Name
{
get { return _name; }
set { _name = value; }
}
public DataTable DataSource
{
get { return _datasource; }
set
{
_datasource = value;
strCatory = GetColumnsStr(_datasource);
strValue = GetValueStr(_datasource);
}
}
public string Title
{
get{return _title;}
set{ _title = value;}
}
public string ImagePath
{
get{return _imagepath;}
set{_imagepath = value;}
}
public int ImgWidth
{
get{return _imgwidth;}
set{_imgwidth = value;}
}
public int ImgHeight
{
get { return _imgheight; }
set { _imgheight = value; }
}
public string SeriesName
{
get { return _seriesname; }
set { _seriesname = value; }
}
#endregion
public OWCChart11()//构造函数
{
}
public OWCChart11(string ImagePath, string Title, string SeriesName)
{
_imagepath = ImagePath;
_title = Title;
_seriesname = SeriesName;
}
public string GetColumnsStr(DataTable dt)
{
StringBuilder datalist = new StringBuilder();
foreach (DataRow dr in dt.Rows)
{
datalist.Append(dr["loginfrom"].ToString() + "/t");
}
return datalist.ToString();
}
public string GetValueStr(DataTable dt)
{
StringBuilder datalist = new StringBuilder();
foreach (DataRow dr in dt.Rows)
{
datalist.Append(dr["count"].ToString() + "/t");
}
return datalist.ToString();
}
//饼图
public string CreatePie()
{
Microsoft.Office.Interop.Owc11.ChartSpace ObjChartPie = new Microsoft.Office.Interop.Owc11.ChartSpaceClass();//创建ChartSpace对象放置图表
Microsoft.Office.Interop.Owc11.ChChart ObjChart = ObjChartPie.Charts.Add(0);//在ChartSpace对象中添加图标,add方法chart对象
ObjChartPie.Border.Color = "White";//设置图形容器边框
ObjChart.Type = Microsoft.Office.Interop.Owc11.ChartChartTypeEnum.chChartTypePie3D;//指定图表类型
ObjChart.HasLegend = true;//图表是否需要图列
ObjChart.Legend.Position = Microsoft.Office.Interop.Owc11.ChartLegendPositionEnum.chLegendPositionRight;//设置图例在右侧显示
ObjChart.HasTitle = true;//图表是否需要标题
ObjChart.Title.Caption = _title;//设置标题
ObjChart.Title.Font.Bold = true;//设置标题是否加粗
ObjChart.Title.Position = Microsoft.Office.Interop.Owc11.ChartTitlePositionEnum.chTitlePositionBottom;//设置标题对齐方式
ObjChart.Title.Font.Color = "red";//设置字体颜色
//添加一个Series
Microsoft.Office.Interop.Owc11.ChSeries ThisChSeries = ObjChart.SeriesCollection.Add(0);
//给定名字
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(),strCatory);
//给定值
ThisChSeries.SetData(Microsoft.Office.Interop.Owc11.ChartDimensionsEnum.chDimValues, Microsoft.Office.Interop.Owc11.ChartSpecialDataSourcesEnum.chDataLiteral.GetHashCode(), strValue);
//表示系列或趋势线上的单个数据标志
Microsoft.Office.Interop.Owc11.ChDataLabels cdl = ObjChart.SeriesCollection[0].DataLabelsCollection.Add();
cdl.HasValue = false;
cdl.HasPercentage = true;
cdl.HasCategoryName = true;
cdl.Interior.Color = "red";
//Point:代表图中的一部分,比如柱图的一条柱,饼图的一个扇区
ObjChart.SeriesCollection[0].Points[0].Interior.Color = "#E4FFE3";//设置第一扇区颜色
ObjChart.SeriesCollection[0].Points[1].Interior.Color = "#7DBD7B";//设置第二扇区颜色
ObjChart.SeriesCollection[0].Points[2].Interior.Color = "#51C94F";//设置第三扇区颜色
//Explosion:返回或设置指定饼图或圆环图扇面的分离程度值。有效范围为 0 到 1000。分离程度值等于图表半径的百分比
ObjChart.SeriesCollection[0].Points[0].Explosion = 45;
ObjChart.SeriesCollection[0].Points[1].Explosion = 45;
ObjChart.SeriesCollection[0].Points[2].Explosion = 45;
//给第二个扇区设置从中心向四周辐射的单色渐变
ObjChart.SeriesCollection[0].Points[1].Interior.SetOneColorGradient(Microsoft.Office.Interop.Owc11.ChartGradientStyleEnum.chGradientFromCenter, Microsoft.Office.Interop.Owc11.ChartGradientVariantEnum.chGradientVariantStart, 0.3, "LightGreen");
//给第三个扇区设置倾斜双色渐变
ObjChart.SeriesCollection[0].Points[2].Interior.SetTwoColorGradient(Microsoft.Office.Interop.Owc11.ChartGradientStyleEnum.chGradientDiagonalDown, Microsoft.Office.Interop.Owc11.ChartGradientVariantEnum.chGradientVariantCenter, "Green", "Red");
//给第1个扇区设置OWC预设的纹理,并设置纹理的背景色为淡绿色,前景色为红色
//OWC提供了很多纹理,这是其中一种
//具体的纹理样式可以参看帮助中的ChartPatternTypeEnum枚举
ObjChart.SeriesCollection[0].Points[0].Interior.SetPatterned(Microsoft.Office.Interop.Owc11.ChartPatternTypeEnum.chPatternDiagonalBrick, "Red", "LightGreen");
//给第2个扇区设置OWC预设的倾斜,
//OWC提供了许多种的倾斜,这是其中一种
//具体的倾斜可以参看帮助中的ChartPresetGradientTypeEnum枚举
ObjChart.SeriesCollection[0].Points[1].Interior.SetPresetGradient(Microsoft.Office.Interop.Owc11.ChartGradientStyleEnum.chGradientDiagonalUp, Microsoft.Office.Interop.Owc11.ChartGradientVariantEnum.chGradientVariantEdges, Microsoft.Office.Interop.Owc11.ChartPresetGradientTypeEnum.chGradientGoldII);
string filename = Name + ".gif";
string strAbsolutPath = _imagepath + "//" + filename;
ObjChartPie.ExportPicture(strAbsolutPath, "GIF", _imgwidth, _imgheight);//输出成GIF
return filename;
}
// 在要显示统计图的页面代码直接调用就可以了
//OWCChart11 chart=new OWCChart11();
//chart.Title="标题";
//chart.SeriesName="图例";
//string filepath=Server.MapPath(".")+"//ChartImages";
//chart.PhaysicalImagePath=filepath;
//chart.PicHight=320;
//chart.PicWidth=500;
//chart.DataSource=GetData();//这是你的数据源
//this.Image1.ImageUrl=filepath+"//"+chart.CreateBar();//显示给图像控件。
}
}