一个.net调用Office.Interop.owc11实现统计图功能的类

转载 2007年10月05日 17:39:00

一个.net调用Office.Interop.owc11实现统计图功能的类

using System;
using Microsoft.Office.Interop;
using System.Data;
using System.Text;

namespace graph
{
 /// <summary>
 /// graphcreat の概要の説明です。
 /// </summary>
 public class graphcreat
 {
  #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;
  string a;
  /// <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 graphcreat()
  {
   //
   // TODO: コンストラクタ ロジックをここに追加してください。
   //
  }
  public graphcreat(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.Type=Microsoft.Office.Interop.Owc11.ChartChartTypeEnum.chChartTypeArea;
   objChart.Type=Microsoft.Office.Interop.Owc11.ChartChartTypeEnum.chChartTypeArea3D;
   //指定图表是否需要图例
   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文件.
   objCSpace.ExportPicture(strAbsolutePath, "GIF", 600,300);
   return filename;
  
  }


 }
}

 

调用页面

后台public void creatclass()
  {
   ghc=new graphcreat();
   ghc.Title ="标题";
   ghc.SeriesName ="图例";
   filepath=Server.MapPath(".")+"//ChartImages";
   ghc.PhaysicalImagePath =filepath;
   ghc.PicHight =300;
   ghc.PicWidth =500;
   ghc.DataSource =GetData();

   this.Image1.ImageUrl =filepath+"//"+ghc.CreateBar ();
  }
  private DataTable GetData()
  {
   string ConnectionString = "server =(local); uid=sa; pwd=; database=jing";
   string sql="select * from graph";
   SqlDataAdapter sda =new SqlDataAdapter(sql,ConnectionString);

   DataSet ds=new DataSet();
   sda.Fill(ds);
   DataTable dt=ds.Tables[0];
   return dt;
  }

 前台

'<%@ Page language="c#" Codebehind="OWC.aspx.cs" AutoEventWireup="false" Inherits="graph.OWC" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<HTML>
 <HEAD>
  <title>OWC</title>
  <meta content="Microsoft Visual Studio .NET 7.1" name="GENERATOR">
  <meta content="C#" name="CODE_LANGUAGE">
  <meta content="JavaScript" name="vs_defaultClientScript">
  <meta content="http://schemas.microsoft.com/intellisense/ie5" name="vs_targetSchema">
 </HEAD>
 <body MS_POSITIONING="GridLayout">
  <form id="Form1" method="post" runat="server">
   <asp:image id="Image1" runat="server"></asp:image>
  </form>
 </body>
</HTML>

 

C#调用office2003的OWC11组件生成报表统计图

owc11控件是microsoft office图表控件(owc10为ofiiceXP的组件、owc11为office2003的组件,组件的路径为C:/ProgramFiles/Common File...
  • tuwen
  • tuwen
  • 2009年03月17日 10:53
  • 3601

在Asp.net中利用OWC11画统计图(柱状图,饼状图及线状图等)及补充

注:转自孟子e章的http://dotnet.aspx.cc/ShowDetail.aspx?id=ADB6D011-A4AD-43A0-A8BF-3CED872A7A95自己略有修改及补充.图形和图...
  • Eray
  • Eray
  • 2007年03月20日 09:43
  • 10529

OWC11画统计图(vb.net)

  • 2012年03月27日 08:59
  • 37KB
  • 下载

Asp.net 使用OWC绘统计图

sqlserver数据源,Owc编程,asp.net

C#利用OWC11画统计图总结

  • 2009年07月28日 09:01
  • 148KB
  • 下载

含Microsoft.Office.Interop.Owc11

  • 2012年12月28日 18:48
  • 747KB
  • 下载

ASP.NET Server-Side Charting With OWC11——饼状图

    最近主要在研究ASP.NET报表的制作,希望把研究出来的东西,分享出来。一方面希望能给这方面有需求的朋友一些弱弱的思路,另一方面希望有研究不足的地方,望大家能够多多指点。 大家共同进步。   ...

c#调用OWC组件绘统计图代码

  • 2010年05月07日 12:43
  • 3.62MB
  • 下载

.net 引用Microsoft.Office.Interop.Word.dll对word文件进行操作

.net 4.0以上版本添加引用,如果不是4.0以上版本可能没有这个,自己去下载一个Microsoft.Office.Interop.Word.dll应该也可以。    引用完成之后...

asp.net 写入word (Microsoft.Office.Interop.Word)经验记录(看不明白问我)

//从控件中导出输出到html上的内容 private void ExpertControl(System.Web.UI.Control repeater, DocumentType type) ...
  • skydxd
  • skydxd
  • 2012年05月05日 14:34
  • 4058
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:一个.net调用Office.Interop.owc11实现统计图功能的类
举报原因:
原因补充:

(最多只允许输入30个字)