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

 

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

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

从数据库中读取要生成图表的数据; 
创建OWC图表; 
添加必要的数据系列; 
为个数据列赋数据; 
定义外观; 
创建GIF图形; 
用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 System
Imports OWC
Imports System.Web.UI

Public 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 est.gif"
    objCSpace.ExportPicture(strAbsolutePath, 
"GIF"600350)

    
'创建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" + ' ' + "2" + ' ' + "3" + ' '+"4" + ' ' + "5" + ' ' + "6" + ' ';
    
string strValue = "9" + ' ' + "8" + ' ' + "4" + ' '+"10" + ' ' + "12" + ' ' + "6" + ' ';

    
//添加一个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"600350);

    
//创建GIF文件的相对路径.
    string strRelativePath = "./i/test.gif";

    
//把图片添加到placeholder.
    string strImageTag = "<IMG SRC='" + strRelativePath + "'/>";
    ChartHolder.Controls.Add(
new LiteralControl(strImageTag));
    }


    
Web Form Designer generated code
}


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

strValue 
+= (nodes.Item(j).ChildNodes.Item(0).InnerText + ' ');
strCategory 
+= (nodes.Item(j).ChildNodes.Item(1).InnerText + ' ');
引用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" + " " + "2" + ' ' + "3" + ' '+"4" + ' ' + "5" + ' ' + "6" + ' ';
        
string strValue = "9" + " " + "8" + ' ' + "4" + ' '+"10" + ' ' + "12" + ' ' + "6" + ' ';

        
//添加一个series
        objChart.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"600350);

        
//创建GIF文件的相对路径.
        string strRelativePath = "./test.gif";

        
//把图片添加到placeholder.
        string strImageTag = "<IMG SRC='" + strRelativePath + "'/>";
        ChartHolder.Controls.Add(
new LiteralControl(strImageTag));
    }


    
Web 窗体设计器生成的代码
}

}

内容概要:本文系统阐述了企业新闻发稿在生成式引擎优化(GEO)时代下的全渠道策略与效果评估体系,涵盖当前企业传播面临的预算、资源、内容与效果评估四大挑战,并深入分析2025年新闻发稿行业五大趋势,包括AI驱动的智能化转型、精准化传播、首发内容价值提升、内容资产化及数据可视化。文章重点解析央媒、地方官媒、综合门户和自媒体四类媒体资源的特性、传播优势与发稿策略,提出基于内容适配性、时间节奏、话题设计的策略制定方法,并构建涵盖品牌价值、销售转化与GEO优化的多维评估框架。此外,结合“传声港”工具实操指南,提供AI智能投放、效果监测、自媒体管理与舆情应对的全流程解决方案,并针对科技、消费、B2B、区域品牌四大行业推出定制化发稿方案。; 适合人群:企业市场/公关负责人、品牌传播管理者、数字营销从业者及中小企业决策者,具备一定媒体传播经验并希望提升发稿效率与ROI的专业人士。; 使用场景及目标:①制定科学的新闻发稿策略,实现从“流量思维”向“价值思维”转型;②构建央媒定调、门户扩散、自媒体互动的立体化传播矩阵;③利用AI工具实现精准投放与GEO优化,提升品牌在AI搜索中的权威性与可见性;④通过数据驱动评估体系量化品牌影响力与销售转化效果。; 阅读建议:建议结合文中提供的实操清单、案例分析与工具指南进行系统学习,重点关注媒体适配性策略与GEO评估指标,在实际发稿中分阶段试点“AI+全渠道”组合策略,并定期复盘优化,以实现品牌传播的长期复利效应。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值