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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
使用OFFICE自带的OWC11制作而成,集成了绘制常用统计方法。<br>chChartTypeArea 29 <br>chChartTypeArea3D 60 <br>chChartTypeAreaOverlapped3D 61 <br>chChartTypeAreaStacked 30 <br>chChartTypeAreaStacked100 31 <br>chChartTypeAreaStacked1003D 63 <br>chChartTypeAreaStacked3D 62 <br>chChartTypeBar3D 50 <br>chChartTypeBarClustered 3 <br>chChartTypeBarClustered3D 51 <br>chChartTypeBarStacked 4 <br>chChartTypeBarStacked100 5 <br>chChartTypeBarStacked1003D 53 <br>chChartTypeBarStacked3D 52 <br>chChartTypeBubble 27 <br>chChartTypeBubbleLine 28 <br>chChartTypeColumn3D 46 <br>chChartTypeColumnClustered 0 <br>chChartTypeColumnClustered3D 47 <br>chChartTypeColumnStacked 1 <br>chChartTypeColumnStacked100 2 <br>chChartTypeColumnStacked1003D 49 <br>chChartTypeColumnStacked3D 48 <br>chChartTypeCombo -1 <br>chChartTypeCombo3D -2 <br>chChartTypeDoughnut 32 <br>chChartTypeDoughnutExploded 33 <br>chChartTypeLine 6 <br>chChartTypeLine3D 54 <br>chChartTypeLineMarkers 7 <br>chChartTypeLineOverlapped3D 55 <br>chChartTypeLineStacked 8 <br>chChartTypeLineStacked100 10 <br>chChartTypeLineStacked1003D 57 <br>chChartTypeLineStacked100Markers 11 <br>chChartTypeLineStacked3D 56 <br>chChartTypeLineStackedMarkers 9 <br>chChartTypePie 18 <br>chChartTypePie3D 58 <br>chChartTypePieExploded 19 <br>chChartTypePieExploded3D 59 <br>chChartTypePieStacked 20 <br>chChartTypePolarLine 42 <br>chChartTypePolarLineMarkers 43 <br>chChartTypePolarMarkers 41 <br>chChartTypePolarSmoothLine 44 <br>chChartTypePolarSmoothLineMarkers 45 <br>chChartTypeRadarLine 34 <br>chChartTypeRadarLineFilled 36 <br>chChartTypeRadarLineMarkers 35 <br>chChartTypeRadarSmoothLine 37 <br>chChartTypeRadarSmoothLineMarkers 38 <br>chChartTypeScatterLine 25 <br>chChartTypeScatterLineFilled 26 <br>chChartTypeScatterLineMarkers 24 <br>chChartTypeScatterMarkers 21 <br>chChartTypeScatterSmoothLine 23 <br>chChartTypeScatterSmoothLineMarkers 22 <br>chChartTypeSmoothLine 12 <br>chChartTypeSmoothLineMarkers 13 <br>chChartTypeSmoothLineStacked 14 <br>chChartTypeSmoothLineStacked100 16 <br>chChartTypeSmoothLineStacked100Markers 17 <br>chChartTypeSmoothLineStackedMarkers 15 <br>chChartTypeStockHLC 39 <br>chChartTypeStockOHLC 40 <br>这六十来个类型,大部已经集成到OwcChart.dll里了。<br>

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值