添加Office組件引用OWC11,實現分析統計圖

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();//显示给图像控件。
     }
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值