在ASP.NET中使用Office Web Components (OWC)创建统计图

在ASP.NET中使用Office Web Components (OWC)创建统计图
作者:孟宪会 发表于:2003-05-10 02:13:58

图形和图表是Web上数据表现的很好的形式,在ASP.NET,可以使用Office Web Components (OWC)来创建统计图。Office Web Component (OWC)是包含在Microsoft Office 2000中的一套组件,利用这些组件,我们可以很方便地在浏览器中或者传统的编程环境中进行数据分析和报表。比如:电子报表,图表,数据透视表等。

要在浏览器中显示图表,可以按下面的步骤进行:

  1. 从数据库中读取要生成图表的数据;
  2. 创建OWC图表;
  3. 添加必要的数据系列;
  4. 为个数据列赋数据;
  5. 定义外观;
  6. 创建GIF图形;
  7. 用IMG标记显示图形。

要生成图表的数据称为数据原,Chart Component组件支持的数据源有:实现IDataSource接口的任何数据源;ADO Recordset对象;XML文件;数组或者一定格式的文本字符串。在ASP中,我们可以用ADO Recordset对象;在.NET的ADO.NET中,由于ADO.NET没有实现IDataSource,.NET也没有提供ADO.NET DataSet对象向ADO Recordset对象的直接转换,如果你有一个 DataSet对象,你要么转换成XML文件,要么生成特殊格式的字符串才可以使用。下面就是本例子的结果:

下面是实现这种功能的VB.NET版本的ASP.NET例子与代码:

OWC.aspx:

<%@ Page Language="vb" AutoEventWireup="false" Codebehind="OWC.aspx.vb" Inherits="aspxWeb.OWC"%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" ><HTML> <HEAD> <title>WebForm1</title> <meta name="GENERATOR" Content="Microsoft Visual Studio 7.0"> <meta name="CODE_LANGUAGE" Content="C#"> <meta name="vs_defaultClientScript" content="JavaScript"> <meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5"> </HEAD> <body MS_POSITIONING="GridLayout"> <form id="Form1" method="post" runat="server"> <asp:placeholder id="ChartHolder" runat="server"></asp:placeholder> </form> </body></HTML>

OWC.aspx.vb:

Imports SystemImports OWCImports System.Web.UIPublic Class OWC Inherits System.Web.UI.Page Protected WithEvents ChartHolder As System.Web.UI.WebControls.PlaceHolder#Region " Web 窗体设计器生成的代码 " '该调用是 Web 窗体设计器所必需的。 <System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent() End Sub Private Sub Page_Init(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Init 'CODEGEN: 此方法调用是 Web 窗体设计器所必需的 '不要使用代码编辑器修改它。 InitializeComponent() End Sub#End Region Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load '在此处放置初始化页的用户代码 '创建ChartSpace对象来放置图表 Dim objCSpace As ChartSpace = New ChartSpaceClass() '在ChartSpace对象中添加图表,Add方法返回chart对象 Dim objChart As WCChart = objCSpace.Charts.Add(0) '指定图表的类型。类型由OWC.ChartChartTypeEnum枚举值得到 objChart.Type = ChartChartTypeEnum.chChartTypeColumnClustered '指定图表是否需要图例 objChart.HasLegend = True '给定标题 objChart.HasTitle = True objChart.Title.Caption = "1-6说数据分布图" '给定x,y轴的图示说明 objChart.Axes(0).HasTitle = True objChart.Axes(0).Title.Caption = "Y 轴 : 数量" objChart.Axes(1).HasTitle = True objChart.Axes(1).Title.Caption = "X 轴: 月份" '计算数据 '*categories 和 values 可以用tab分割的字符串来表示* Dim strSeriesName As String = "图例 1" Dim strCategory As String = "1" + ControlChars.Tab + "2" + ControlChars.Tab _+ "3" + ControlChars.Tab + "4" + ControlChars.Tab + "5" + ControlChars.Tab _+ "6" + ControlChars.Tab Dim strValue As String = "9" + ControlChars.Tab + "8" + ControlChars.Tab _+ "4" + ControlChars.Tab + "10" + ControlChars.Tab + "12" + ControlChars.Tab _+ "6" + ControlChars.Tab '添加一个series objChart.SeriesCollection.Add(0) '给定series的名字 objChart.SeriesCollection(0).SetData(ChartDimensionsEnum.chDimSeriesNames,_ ChartSpecialDataSourcesEnum.chDataLiteral, strSeriesName) '给定分类 objChart.SeriesCollection(0).SetData(ChartDimensionsEnum.chDimCategories,_ ChartSpecialDataSourcesEnum.chDataLiteral, strCategory) '给定值 objChart.SeriesCollection(0).SetData(ChartDimensionsEnum.chDimValues,_ ChartSpecialDataSourcesEnum.chDataLiteral, strValue) '输出成GIF文件. Dim strAbsolutePath As String = (Server.MapPath(".")) + "/Images/test.gif" objCSpace.ExportPicture(strAbsolutePath, "GIF", 600, 350) '创建GIF文件的相对路径. Dim strRelativePath As String = "Images/test.gif" '把图片添加到placeholder. Dim strImageTag As String = "<IMG SRC='" + strRelativePath + "'/>" ChartHolder.Controls.Add(New LiteralControl(strImageTag)) End Sub End Class

下面是C#版本的OWC.asp.cs

ublic class owc: System.Web.UI.Page{ protected System.Web.UI.WebControls.PlaceHolder ChartHolder;private void Page_Load(object sender, System.EventArgs e){// 在此处放置用户代码以初始化页面 //创建ChartSpace对象来放置图表 OWC.ChartSpace objCSpace = new OWC.ChartSpaceClass (); //在ChartSpace对象中添加图表,Add方法返回chart对象 OWC.WCChart objChart = objCSpace.Charts.Add (0); //指定图表的类型。类型由OWC.ChartChartTypeEnum枚举值得到 objChart.Type = OWC.ChartChartTypeEnum.chChartTypeColumnClustered; //指定图表是否需要图例 objChart.HasLegend = true; //给定标题 objChart.HasTitle = true; objChart.Title.Caption= "上半年分布图"; //给定x,y轴的图示说明 objChart.Axes[0].HasTitle = true; objChart.Axes[0].Title.Caption = "Y : 数量"; objChart.Axes[1].HasTitle = true; objChart.Axes[1].Title.Caption = "X : 月份"; //计算数据 /*categories 和 values 可以用tab分割的字符串来表示*/ string strSeriesName = "图例 1"; string strCategory = "1" + '/t' + "2" + '/t' + "3" + '/t'+"4" + '/t' + "5" + '/t' + "6" + '/t'; string strValue = "9" + '/t' + "8" + '/t' + "4" + '/t'+"10" + '/t' + "12" + '/t' + "6" + '/t'; //添加一个series objChart.SeriesCollection.Add(0); //给定series的名字 objChart.SeriesCollection[0].SetData (OWC.ChartDimensionsEnum.chDimSeriesNames,+ (int)OWC.ChartSpecialDataSourcesEnum.chDataLiteral, strSeriesName); //给定分类 objChart.SeriesCollection[0].SetData (OWC.ChartDimensionsEnum.chDimCategories,+ (int)OWC.ChartSpecialDataSourcesEnum.chDataLiteral, strCategory); //给定值 objChart.SeriesCollection[0].SetData (OWC.ChartDimensionsEnum.chDimValues, (int)OWC.ChartSpecialDataSourcesEnum.chDataLiteral, strValue); //输出成GIF文件. string strAbsolutePath = (Server.MapPath(".")) + "//i//test.gif"; objCSpace.ExportPicture(strAbsolutePath, "GIF", 600, 350); //创建GIF文件的相对路径. string strRelativePath = "./i/test.gif"; //把图片添加到placeholder. string strImageTag = "<IMG SRC='" + strRelativePath + "'/>"; ChartHolder.Controls.Add(new LiteralControl(strImageTag));}#region Web Form Designer generated codeoverride protected void OnInit(EventArgs e){ CODEGEN:该调用是 ASP.NET Web 窗体设计器所必需的。//InitializeComponent();base.OnInit(e);}/// <summary>/// 设计器支持所需的方法 - 不要使用代码编辑器修改/// 此方法的内容。/// </summary>private void InitializeComponent(){ this.Load += new System.EventHandler(this.Page_Load); }#endregion}

如果用ADO.NET的DataSet对象,可以生成以TAB分割的字符串:

strValue += (nodes.Item(j).ChildNodes.Item(0).InnerText + '/t');strCategory += (nodes.Item(j).ChildNodes.Item(1).InnerText + '/t'); 引用OWC11的代码 using System;using System.Collections;using System.ComponentModel;using System.Data;using System.Drawing;using System.Web;using System.Web.SessionState;using System.Web.UI;using System.Web.UI.WebControls;using System.Web.UI.HtmlControls;using Microsoft.Office.Interop.Owc11;namespace eMeng.Exam{/// <summary>/// OWC 的摘要说明。/// </summary>public class OWCExam : System.Web.UI.Page{protected System.Web.UI.WebControls.PlaceHolder ChartHolder;private void Page_Load(object sender, System.EventArgs e){//创建ChartSpace对象来放置图表Microsoft.Office.Interop.Owc11.ChartSpace objCSpace = new Microsoft.Office.Interop.Owc11.ChartSpaceClass (); //在ChartSpace对象中添加图表,Add方法返回chart对象Microsoft.Office.Interop.Owc11.ChChart objChart = objCSpace.Charts.Add (0); //指定图表的类型。类型由OWC.ChartChartTypeEnum枚举值得到objChart.Type = Microsoft.Office.Interop.Owc11.ChartChartTypeEnum.chChartTypeColumnClustered;//指定图表是否需要图例objChart.HasLegend = true;//给定标题objChart.HasTitle = true;objChart.Title.Caption= "上半年分布图";//给定x,y轴的图示说明objChart.Axes[0].HasTitle = true;objChart.Axes[0].Title.Caption = "Y : 数量";objChart.Axes[1].HasTitle = true;objChart.Axes[1].Scaling.SplitMinimum = 200;objChart.Axes[1].Title.Caption = "X : 月份";//计算数据/*categories 和 values 可以用tab分割的字符串来表示*/string strSeriesName = "图例 1";string strCategory = "1" + "/t" + "2" + '/t' + "3" + '/t'+"4" + '/t' + "5" + '/t' + "6" + '/t';string strValue = "9" + "/t" + "8" + '/t' + "4" + '/t'+"10" + '/t' + "12" + '/t' + "6" + '/t';//添加一个seriesobjChart.SeriesCollection.Add(0);//给定series的名字objChart.SeriesCollection[0].SetData (Microsoft.Office.Interop.Owc11.ChartDimensionsEnum.chDimSeriesNames,+ (int)Microsoft.Office.Interop.Owc11.ChartSpecialDataSourcesEnum.chDataLiteral, strSeriesName);//给定分类objChart.SeriesCollection[0].SetData (Microsoft.Office.Interop.Owc11.ChartDimensionsEnum.chDimCategories,+ (int)Microsoft.Office.Interop.Owc11.ChartSpecialDataSourcesEnum.chDataLiteral, strCategory);//给定值objChart.SeriesCollection[0].SetData(Microsoft.Office.Interop.Owc11.ChartDimensionsEnum.chDimValues,(int)Microsoft.Office.Interop.Owc11.ChartSpecialDataSourcesEnum.chDataLiteral, strValue); //输出成GIF文件.string strAbsolutePath = (Server.MapPath(".")) + "//test.gif";objCSpace.ExportPicture(strAbsolutePath, "GIF", 600, 350);//创建GIF文件的相对路径.string strRelativePath = "./test.gif";//把图片添加到placeholder.string strImageTag = "<IMG SRC='" + strRelativePath + "'/>";ChartHolder.Controls.Add(new LiteralControl(strImageTag));}#region Web 窗体设计器生成的代码override protected void OnInit(EventArgs e){ CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。//InitializeComponent();base.OnInit(e);}/// <summary>/// 设计器支持所需的方法 - 不要使用代码编辑器修改/// 此方法的内容。/// </summary>private void InitializeComponent(){ this.Load += new System.EventHandler(this.Page_Load);}#endregion}}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值