好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

OWC初体验

OWC初体验

需要添加引用 “ Microsoft Office Web Components 11.0  ”,在代码页添加 “using  Microsoft.Office.Interop.Owc11 ;” 

成功添加这个引用需要安装office 2003,装了office 2007 不行,或者直接 去微软网站下载owc1.exe  吧(安装这个之后应该可以不用安装office了吧?没试过,但是如果安装了office 2007 的话下载安装owc11.exe是可以的)

先看图

代码

using  System;
using  System.Collections.Generic;
using  System.Linq;
using  System.Web;
using  System.Web.UI;
using  System.Web.UI.WebControls;

using  Microsoft.Office.Interop.Owc11;
using  System.Data.SqlClient;
using  System.Data;

public   partial   class  _Default : System.Web.UI.Page 
{
     protected   void  Page_Load( object  sender, EventArgs e)
    {
        
         string  strConnectionString  =   " server = (local);DataBase=blog;uID=a;password=a; " ;
         string  strSQL  =   " select TMonth,TCount from TestChart " ;
        SqlConnection myconn  =   new  SqlConnection(strConnectionString);
        myconn.Open();
        SqlDataAdapter sda  =   new  SqlDataAdapter(strSQL, myconn);
        DataSet DS  =   new  DataSet();
        sda.Fill(DS);

         int  dataCount  =  DS.Tables[ 0 ].Rows.Count;
       
         // 月
         string [] Mon  =   new   string [dataCount];
         // Data
         string [] MonData  =   new   string [dataCount];

         for  ( int  i  =   0 ; i  <  dataCount; i ++ )
        {
            Mon[i]  =  DS.Tables[ 0 ].Rows[i][ " TMonth " ].ToString();
            MonData[i]  =  DS.Tables[ 0 ].Rows[i][ " TCount " ].ToString();
            
        }

         // 为X轴指定特定字符串,以便显示数据
         string  strXData  =   string .Empty;
         foreach  ( string  strData  in  Mon)
        {
            strXData  +=  strData  +   " \t " ;
        }
         // 为y轴指定特定的字符串,以便于x轴对应
         string  strYData =   string .Empty;
         foreach  ( string  value  in  MonData)
        {
            strYData  +=  value  +   " \t  " ;
        }

         // ChartSpace对象:图形容器对象,也是顶层对象。如果要运用OWC绘制图形,至少要创建一个ChartSpace对象。
         // 所谓容器,就是说ChartSpace对象中可以包含多个图形对象,最多16个。  

         // 创建chartSpace对象来放置图表
        ChartSpace layspace  =   new  ChartSpace();
         
         // 在chartSpace中添加图表
        ChChart InsertChart  =  layspace.Charts.Add( 0 );
        

         // ChChart对象、ChCharts集合、ChCharts.Add()方法:
         // ChChart是图形对象。一个柱状图、饼状图、散点图等均为一个图形对象,多个图形对象构成ChCharts集合。
         // ChartSpace对象就包含一个ChCharts集合,这些ChChart之间互相叠加,比如簇状条形图就是多个单柱状图地叠加, //
         // 圆环套圆环图就是两个单圆环图地叠加。通过ChCharts.Add()方法增加一个图形。    


         // 指定绘制图表的类型。
         // 类型可以通过OWC.ChartChartTypeEnum枚举值得到
         // 折线图
         // InsertChart.Type = ChartChartTypeEnum.chChartTypeLine;
         // 面积图
         // InsertChart.Type = ChartChartTypeEnum.chChartTypeArea;
         // 条形图
         // InsertChart.Type = ChartChartTypeEnum.chChartTypeBarClustered;
         // 饼状图
         // InsertChart.Type = ChartChartTypeEnum.chChartTypePie; 
         // 柱形图
        InsertChart.Type  =  ChartChartTypeEnum.chChartTypeColumnClustered;
        
        
         // ChSeries对象、ChSeriesCollection集合、ChSeriesCollection.Add()方法:
         // 帮助中说:一个ChSeries对象表示图中地一个系列。实际上,你可以这样理解,当图形容器中包含多个图形时,
         // 一个ChSeries对象就表示在这里面地一个图形,可以通过ChSeriesCollection集合,可以运用数组地方式访问各个ChSeries,
         // 比如ChSeriesCollection[0]表示第一个图形。运用ChSeriesCollection.Add()方法在当前容器中新增一个图形。 

         // Point属性和Points集合:一个Point代表图形中地一个部分,比如柱状图地一条柱,饼状图地一个扇区等。
         //  ChChart 对象提供Points集合,可以运用数组地形式访问各个Point,比如Points[0]表示第1个部分。
         // Interior属性:代表一  个形状地内部空间。
         // 比如,ChartSpace对象地Interior属性代表图形容器内、图形外地空间,一个扇区Interior属性    
         // 表示该扇区地内部空间。该属性在设置图形各个部分地颜色时起到重要作用。窃以为,以上对象和属性地理解、运用相当关 
         // 键,顺着它们找下去,标题、图例、数据标签、字体等重要地特性特点都能顺利找到

         // 指定图表是否需要图例标注
        InsertChart.HasLegend  =   true ;
     
         // 显示标题
        InsertChart.HasTitle  =   true ;
         // 设置标题内容
        InsertChart.Title.Caption  =   " 测试数据 " ;

         // 饼状图没有x、y轴,当为饼状图时此段代码不能有
         // 为x、y轴添加图例说明
        InsertChart.Axes[ 0 ].HasTitle  =   true ;
        InsertChart.Axes[ 0 ].Title.Caption  =   " 月份 " ;
        InsertChart.Axes[ 1 ].HasTitle  =   true ;
         // 下面这行代码去掉屏蔽一看就明白什么意思了
         // InsertChart.Axes[1].Scaling.SplitMinimum = 2;
        InsertChart.Axes[ 1 ].Title.Caption  =   " 数量 " ;
       
         // 添加一个系列
        InsertChart.SeriesCollection.Add( 0 );

         // 给出系列的名字
        InsertChart.SeriesCollection[ 0 ].SetData(ChartDimensionsEnum.chDimSeriesNames,
             + ( int )ChartSpecialDataSourcesEnum.chDataLiteral, " 第一批数据 " );

         // 给定分类 数据格式为: 数据\t数据\t数据\t数据 用“\t”界定边界,而且不能重复。重复的值显示一个
        InsertChart.SeriesCollection[ 0 ].SetData(ChartDimensionsEnum.chDimCategories,
             + ( int )ChartSpecialDataSourcesEnum.chDataLiteral, strXData);
     
         // 给定值
        InsertChart.SeriesCollection[ 0 ].SetData(ChartDimensionsEnum.chDimValues,
             + ( int )ChartSpecialDataSourcesEnum.chDataLiteral,strYData);
        
         // 将柱状图地第一条柱设置为红色    
         // Point:代表图中地一部分,比如柱图地一条柱,饼图地一个扇区    
         // Interior:表示指定对象地内部 

         // 增加数据值标签
        InsertChart.SeriesCollection[ 0 ].DataLabelsCollection.Add();
         // 显示数据值
        InsertChart.SeriesCollection[ 0 ].DataLabelsCollection[ 0 ].HasValue  =   true ;        

        InsertChart.SeriesCollection[ 0 ].Points[ 0 ].Interior.Color  =   " Red " ;
        InsertChart.SeriesCollection[ 0 ].Points[ 2 ].Interior.Color  =   " Red " ;
        InsertChart.SeriesCollection[ 0 ].Points[ 5 ].Interior.Color  =   " Red " ;

         // 输出
         string  imgname  =  DateTime.Now.Date.ToShortDateString()  +   " - "   +  DateTime.Now.Hour.ToString()  +   " - "   +
            DateTime.Now.Minute.ToString()  +   " - "   +  DateTime.Now.Second.ToString()  +   " - "   +  DateTime.Now.Millisecond.ToString()  +   " .gif " ;
         string  strAbso  =  (Server.MapPath( " . " )) + " \\ "   +  imgname;
        layspace.ExportPicture( strAbso, " gif " , 600 , 300 );
         // 创建gif文件的相对路径
         // string strRelativePath = "showdata.gif";
         string  strRelativePath  =  imgname;
        pic.InnerHtml  =   " <img src=' " +  strRelativePath  +   " '> " ;

在上述代码中添加第二个系列(在上述代码第136行添加一下代码)

// -----------------------------------------------
         // 添加第二个系列
        InsertChart.SeriesCollection.Add( 1 );
         // 给出系列的名字
        InsertChart.SeriesCollection[ 1 ].SetData(ChartDimensionsEnum.chDimSeriesNames,
             + ( int )ChartSpecialDataSourcesEnum.chDataLiteral,  " 第二批数据 " );

         // 给定分类 数据格式为: 数据\t数据\t数据\t数据 用“\t”界定边界,而且不能重复。重复的值显示一个
        InsertChart.SeriesCollection[ 1 ].SetData(ChartDimensionsEnum.chDimCategories,
             + ( int )ChartSpecialDataSourcesEnum.chDataLiteral, strXData);
         // 给定值
        InsertChart.SeriesCollection[ 1 ].SetData(ChartDimensionsEnum.chDimValues,
             + ( int )ChartSpecialDataSourcesEnum.chDataLiteral, strYData);
         // 增加数据值标签
        InsertChart.SeriesCollection[ 1 ].DataLabelsCollection.Add();

效果图:

在试试饼状图

代码

using  System;
using  System.Collections.Generic;
using  System.Linq;
using  System.Web;
using  System.Web.UI;
using  System.Web.UI.WebControls;

using  Microsoft.Office.Interop.Owc11;
using  System.Data.SqlClient;
using  System.Data;

public   partial   class  _Default : System.Web.UI.Page 
{
     protected   void  Page_Load( object  sender, EventArgs e)
    {
        
         string  strConnectionString  =   " server = (local);DataBase=blog;uID=a;password=a; " ;
         string  strSQL  =   " select TMonth,TCount from TestChart " ;
        SqlConnection myconn  =   new  SqlConnection(strConnectionString);
        myconn.Open();
        SqlDataAdapter sda  =   new  SqlDataAdapter(strSQL, myconn);
        DataSet DS  =   new  DataSet();
        sda.Fill(DS);

         int  dataCount  =  DS.Tables[ 0 ].Rows.Count;
       
         // 月
         string [] Mon  =   new   string [dataCount];
         // Data
         string [] MonData  =   new   string [dataCount];

         for  ( int  i  =   0 ; i  <  dataCount; i ++ )
        {
            Mon[i]  =  DS.Tables[ 0 ].Rows[i][ " TMonth " ].ToString();
            MonData[i]  =  DS.Tables[ 0 ].Rows[i][ " TCount " ].ToString();
            
        }

         // 为X轴指定特定字符串,以便显示数据
         string  strXData  =   string .Empty;
         foreach  ( string  strData  in  Mon)
        {
            strXData  +=  strData  +   " \t " ;
        }
         // 为y轴指定特定的字符串,以便于x轴对应
         string  strYData =   string .Empty;
         foreach  ( string  value  in  MonData)
        {
            strYData  +=  value  +   " \t  " ;
        }

         // ChartSpace对象:图形容器对象,也是顶层对象。如果要运用OWC绘制图形,至少要创建一个ChartSpace对象。
         // 所谓容器,就是说ChartSpace对象中可以包含多个图形对象,最多16个。  

         // 创建chartSpace对象来放置图表
        ChartSpace layspace  =   new  ChartSpace();
         
         // 在chartSpace中添加图表
        ChChart InsertChart  =  layspace.Charts.Add( 0 );
        

         // ChChart对象、ChCharts集合、ChCharts.Add()方法:
         // ChChart是图形对象。一个柱状图、饼状图、散点图等均为一个图形对象,多个图形对象构成ChCharts集合。
         // ChartSpace对象就包含一个ChCharts集合,这些ChChart之间互相叠加,比如簇状条形图就是多个单柱状图地叠加, //
         // 圆环套圆环图就是两个单圆环图地叠加。通过ChCharts.Add()方法增加一个图形。    


         // 指定绘制图表的类型。
         // 类型可以通过OWC.ChartChartTypeEnum枚举值得到
         // 折线图
         // InsertChart.Type = ChartChartTypeEnum.chChartTypeLine;
         // 面积图
         // InsertChart.Type = ChartChartTypeEnum.chChartTypeArea;
         // 条形图
         // InsertChart.Type = ChartChartTypeEnum.chChartTypeBarClustered;
         // 饼状图
        InsertChart.Type  =  ChartChartTypeEnum.chChartTypePie; 
         // 柱形图
         // InsertChart.Type = ChartChartTypeEnum.chChartTypeColumnClustered;
        
        
         // ChSeries对象、ChSeriesCollection集合、ChSeriesCollection.Add()方法:
         // 帮助中说:一个ChSeries对象表示图中地一个系列。实际上,你可以这样理解,当图形容器中包含多个图形时,
         // 一个ChSeries对象就表示在这里面地一个图形,可以通过ChSeriesCollection集合,可以运用数组地方式访问各个ChSeries,
         // 比如ChSeriesCollection[0]表示第一个图形。运用ChSeriesCollection.Add()方法在当前容器中新增一个图形。 

         // Point属性和Points集合:一个Point代表图形中地一个部分,比如柱状图地一条柱,饼状图地一个扇区等。
         //  ChChart 对象提供Points集合,可以运用数组地形式访问各个Point,比如Points[0]表示第1个部分。
         // Interior属性:代表一  个形状地内部空间。
         // 比如,ChartSpace对象地Interior属性代表图形容器内、图形外地空间,一个扇区Interior属性    
         // 表示该扇区地内部空间。该属性在设置图形各个部分地颜色时起到重要作用。窃以为,以上对象和属性地理解、运用相当关 
         // 键,顺着它们找下去,标题、图例、数据标签、字体等重要地特性特点都能顺利找到

         // 指定图表是否需要图例标注
        InsertChart.HasLegend  =   true ;     
         // 显示标题
        InsertChart.HasTitle  =   true ;
         // 设置标题内容
        InsertChart.Title.Caption  =   " 测试数据 " ;

         /// /饼状图没有x、y轴,当为饼状图时此段代码不能有
         /// /为x、y轴添加图例说明
         // InsertChart.Axes[0].HasTitle = true;
         // InsertChart.Axes[0].Title.Caption = "月份";
         // InsertChart.Axes[1].HasTitle = true;
         /// /下面这行代码去掉屏蔽一看就明白什么意思了
         /// /InsertChart.Axes[1].Scaling.SplitMinimum = 2;
         // InsertChart.Axes[1].Title.Caption = "数量";
       
         // 添加一个系列
        InsertChart.SeriesCollection.Add( 0 );
         // 给出系列的名字
        InsertChart.SeriesCollection[ 0 ].SetData(ChartDimensionsEnum.chDimSeriesNames,
             + ( int )ChartSpecialDataSourcesEnum.chDataLiteral, " 第一批数据 " );

         // 给定分类 数据格式为: 数据\t数据\t数据\t数据 用“\t”界定边界,而且不能重复。重复的值显示一个
        InsertChart.SeriesCollection[ 0 ].SetData(ChartDimensionsEnum.chDimCategories,
             + ( int )ChartSpecialDataSourcesEnum.chDataLiteral, strXData);     
         // 给定值
        InsertChart.SeriesCollection[ 0 ].SetData(ChartDimensionsEnum.chDimValues,
             + ( int )ChartSpecialDataSourcesEnum.chDataLiteral,strYData);
        
         // 将柱状图地第一条柱设置为红色    
         // Point:代表图中地一部分,比如柱图地一条柱,饼图地一个扇区    
         // Interior:表示指定对象地内部 

         // 增加数据值标签
        InsertChart.SeriesCollection[ 0 ].DataLabelsCollection.Add();
         // 显示数据值
        InsertChart.SeriesCollection[ 0 ].DataLabelsCollection[ 0 ].HasValue  =   true ; 
         // 显示百分比
        InsertChart.SeriesCollection[ 0 ].DataLabelsCollection[ 0 ].HasPercentage  =   true ;

        InsertChart.SeriesCollection[ 0 ].Points[ 0 ].Interior.Color  =   " Red " ;
        InsertChart.SeriesCollection[ 0 ].Points[ 2 ].Interior.Color  =   " Red " ;
        InsertChart.SeriesCollection[ 0 ].Points[ 5 ].Interior.Color  =   " Red " ;
        
         // 输出
         string  imgname  =  DateTime.Now.Date.ToShortDateString()  +   " - "   +  DateTime.Now.Hour.ToString()  +   " - "   +
            DateTime.Now.Minute.ToString()  +   " - "   +  DateTime.Now.Second.ToString()  +   " - "   +  DateTime.Now.Millisecond.ToString()  +   " .gif " ;
         string  strAbso  =  (Server.MapPath( " . " )) + " \\ "   +  imgname;
        layspace.ExportPicture( strAbso, " gif " , 400 , 400 );
         // 创建gif文件的相对路径
         // string strRelativePath = "showdata.gif";
         string  strRelativePath  =  imgname;
        pic.InnerHtml  =   " <img src=' " +  strRelativePath  +   " '> " ;


    }
}

注意的是饼状图中没有x、y轴;且只显示一个系列的数据(我添加了第二个系列数据时没显示)

在加段代码,柱状3D图 先看效果:

很漂亮吧,来看代码

//  在此处放置用户代码以初始化页面
         string  strCategory  =   " 1 "   +   ' \t '   +   " 2 "   +   ' \t '   +   " 3 "   +   ' \t '   +   " 4 "   +   ' \t '   +   " 5 "   +   ' \t '   +   " 6 "   +   ' \t '   +   " 7 "   +   ' \t '   +   " 8 "   +   ' \t '   +   " 9 "   +   ' \t '   +   " 10 "   +   ' \t '   +   " 11 "   +   ' \t '   +   " 12 "   +   ' \t ' ;
         string  strValue  =   " 9 "   +   ' \t '   +   " 8 "   +   ' \t '   +   " 4 "   +   ' \t '   +   " 10 "   +   ' \t '   +   " 12 "   +   ' \t '   +   " 6 "   +   ' \t '   +   " 1 "   +   ' \t '   +   " 2 "   +   ' \t '   +   " 3 "   +   ' \t '   +   " 4 "   +   ' \t '   +   " 12 "   +   ' \t '   +   " 6 "   +   ' \t ' ;

         // 声明对象
        ChartSpace ThisChart  =   new  ChartSpaceClass();
        ChChart ThisChChart  =  ThisChart.Charts.Add( 0 );
        ChSeries ThisChSeries  =  ThisChChart.SeriesCollection.Add( 0 );

         // 显示图例
        ThisChChart.HasLegend  =   true ;
         // 标题
        ThisChChart.HasTitle  =   true ;
        ThisChChart.Title.Caption  =   " 统计图 " ;
         // 给定x,y轴图示说明
        ThisChChart.Axes[ 0 ].HasTitle  =   true ;
        ThisChChart.Axes[ 1 ].HasTitle  =   true ;
        ThisChChart.Axes[ 0 ].Title.Caption  =   " 月份 " ;
        ThisChChart.Axes[ 1 ].Title.Caption  =   " 数量 " ;

         // 图表类型
        ThisChChart.Type  =  ChartChartTypeEnum.chChartTypeColumnClustered3D; // 3D 柱状图
         // ThisChChart.Type = ChartChartTypeEnum.chChartTypeSmoothLine; // 平滑曲线图
         // ThisChChart.Type = ChartChartTypeEnum.chChartTypeArea;  // 折线面积图
         // ThisChChart.Type = ChartChartTypeEnum.chChartTypeArea3D; // 折线3D面积图
         // ThisChChart.Type = ChartChartTypeEnum.chChartTypeAreaOverlapped3D; // 折线3D面积图
         // ThisChChart.Type = ChartChartTypeEnum.chChartTypeAreaStacked; // 折线面积图加边框
         // ThisChChart.Type = ChartChartTypeEnum.chChartTypeAreaStacked100; // 折线面积图加边框百分比图
         // ThisChChart.Type = ChartChartTypeEnum.chChartTypeAreaStacked1003D; // 折线3D面积图加边框百分比图
         // ThisChChart.Type = ChartChartTypeEnum.chChartTypeAreaStacked3D; // 折线3D面积图加边框
         // ThisChChart.Type = ChartChartTypeEnum.chChartTypeBar3D; // 横道图3D
         // ThisChChart.Type = ChartChartTypeEnum.chChartTypeBarClustered; // 横道图
         // ThisChChart.Type = ChartChartTypeEnum.chChartTypeBarClustered3D; // 横道图3D
         // ThisChChart.Type = ChartChartTypeEnum.chChartTypeBarStacked; // 横道图3D
         // ThisChChart.Type = ChartChartTypeEnum.chChartTypeBarStacked100; // 横道图3D百分比图
         // ThisChChart.Type = ChartChartTypeEnum.chChartTypeBarStacked1003D; // 横道图3D百分比图
         // ThisChChart.Type = ChartChartTypeEnum.chChartTypeBubble;  // 测试不通过
         // ThisChChart.Type = ChartChartTypeEnum.chChartTypeBubbleLine; // 测试不通过
         // ThisChChart.Type = ChartChartTypeEnum.chChartTypeColumn3D; // 柱状图3D 
         // ThisChChart.Type = ChartChartTypeEnum.chChartTypeColumnClustered; // 柱状图3D 
         // ThisChChart.Type = ChartChartTypeEnum.chChartTypeColumnClustered3D; // 柱状图3D 
         // ThisChChart.Type = ChartChartTypeEnum.chChartTypeColumnStacked; // 柱状图
         // ThisChChart.Type = ChartChartTypeEnum.chChartTypeColumnStacked100; // 柱状图3D 百分比图
         // ThisChChart.Type = ChartChartTypeEnum.chChartTypeColumnStacked1003D; // 柱状图3D百分比图 
         // ThisChChart.Type = ChartLegendPositionEnum.chLegendPositionBottom;
         // 旋转
         // 表示指定三维图表的旋转角度
        ThisChChart.Rotation  =   360 ;
         // 表示指定三维图表的视图斜率。有效范围为 -90 到 90
        ThisChChart.Inclination  =   35 ;
         // 背景颜色
        ThisChChart.PlotArea.Interior.Color  =   " red " ;
         // 底座颜色
        ThisChChart.PlotArea.Floor.Interior.Color  =   " green " ;
         // 单个类别中标志之间的重叠量
        ThisChChart.Overlap  =   50 ;

         /// //给定series的名字
        ThisChSeries.SetData(ChartDimensionsEnum.chDimSeriesNames, ChartSpecialDataSourcesEnum.chDataLiteral.GetHashCode(),  " 日期 " );
         // 给定分类
        ThisChSeries.SetData(ChartDimensionsEnum.chDimCategories, ChartSpecialDataSourcesEnum.chDataLiteral.GetHashCode(), strCategory);
         // 给定值
        ThisChSeries.SetData(ChartDimensionsEnum.chDimValues,ChartSpecialDataSourcesEnum.chDataLiteral.GetHashCode(), strValue);

         // 导出图像文件
         try
        {
            ThisChart.ExportPicture(Server.MapPath( " chart.gif " ),  " gif " ,  600 ,  350 );
            Response.Write( " <IMG SRC='chart.gif'/> " );        
            
        }
         catch  (Exception ee)
        {

        }

http://www.cnblogs.com/ycsfwhh/archive/2011/01/08/1930530.html

作者: Leo_wl

    

出处: http://www.cnblogs.com/Leo_wl/

    

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

版权信息

查看更多关于OWC初体验的详细内容...

  阅读:44次