zoukankan      html  css  js  c++  java
  • 用OWC做统计图总结

     最近做项目要对数据进行统计分析,所以做一些统计图,首先想到了微软的owc,同时自己把owc的操作封装了一下。在程序里调用里方便的多。

    先看一下效果图:

    在使用该类前当然首先要引用一下owc的dll啦!

    公布源码:

    using System;
    using System.Data;
    using System.Text;

    using Microsoft.Office.Interop;

    namespace OWCChartTest
    {
     /// <summary>
     /// 利用OWC11进行作统计图的封装类。
     /// 李天平 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();//创建ChartSpace对象来放置图表   
       Microsoft.Office.Interop.Owc11.ChChart objChart  = 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.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();//创建ChartSpace对象来放置图表   
       Microsoft.Office.Interop.Owc11.ChChart objChart  = 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.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.HasPercentage=true;   
       //图表绘图区的图例放置在右侧。
    //   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();//创建ChartSpace对象来放置图表   
       Microsoft.Office.Interop.Owc11.ChChart objChart  = 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.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;
       
      }

     }
    }

    在要显示统计图的页面代码直接调用就可以了

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

  • 相关阅读:
    分享一个单例模型类Singleton代码
    异步 HttpContext.Current实现取值的方法(解决异步Application,Session,Cache...等失效的问题)
    httpwebrequest 用GET方法时报无法发送具有此谓词类型的内容正文
    Oracle 存储过程的导出导入序列的导出
    通用后台模版的实现
    java流类基础练习。
    java流。基础
    java流类、、、理解不够,流太多不知怎么用好?
    java代码流类。。程序怎么跟书上的结果不一样???
    java代码流类
  • 原文地址:https://www.cnblogs.com/ltp/p/289690.html
Copyright © 2011-2022 走看看