首页 > 编程 > .NET > 正文

如何在ASP.NET中用OWC绘制图表(1)

2024-07-10 12:55:21
字体:
来源:转载
供稿:网友
如何在asp.net中用owc绘制图表 (1)

一、概述

二、设置图表引擎

三、owc的许可证问题

四、owc的运行机制

五、在web服务器上安装owc 10

六、owc编程模式

━━━━━━━━━━━━━

正文:

━━━━━━━━━━━━━

一、概述

在开发应用程序时,经常会遇到必须提供交互式图表的情况。例如,你可能在开发一个管理销售和产品数据的应用程序,数据保存在sql server数据库上,应用程序允许用户添加数据、更新现有数据,但除了这些功能之外,客户还要求应用程序能够用饼图、柱形图或xy散点图的形式直观地描述数据。

在windows桌面应用程序中,这类要求从来不成为问题,可供选用的图形库和绘图组件实在太多了。但对于web应用程序,问题就变得复杂多了。要在web应用中绘制图表,可供选择的办法包括:

■ 客户端:

利用各种activex组件,web浏览器内完全有可能达到“丰富”windows客户程序那样的功能。缺点是客户端的设置复杂化,要求发布客户端软件,通常按照每客户端的方式计算许可证费用。另外,非ms windows/ie的客户端一般难以运行。

■ 服务器端:

利用web服务器上运行的服务器端代码,动态地生成图表,然后以gif或jpg图形的形式发送给客户端。这种办法的优点是,客户端只需要一个标准的浏览器。与客户端技术相比的缺点是,图形的交互能力差(除非向服务器提交新的请求,否则就不能缩放、滚动)。许多地图网站(例如mapquest.com)大量地运用了这一技术。注意,地图图形不是保存在web服务器上,而是用户发出一个请求时动态从地图数据库生成。

本文主要讨论如何利用服务器端的图表绘制技术在asp.net web页面中提供图形功能,具体地说,本文分析了如何利用ms sql数据库中保存的数据生成一个散点图。

二、设置图表引擎

如果要在asp.net应用程序中绘制图表,必须要有一个合适的图表引擎。asp.net有一个内建的图形工具库,即system.drawing名称空间的gdi+,可以用来创建简单的饼图、柱形图、折线图等,不过它属于低级的api,算不上绘制图表的引擎,特别是不适合绘制复杂的图表。

asp.net环境下还有许多商业化的图表绘制代码库,随便搜索一下google,就可以找到:

mycos charts .net web forms edition

dundas chart for asp.net

.netcharting

charting controls at the asp.net control gallery

不过,许多产品都相当昂贵,而且与世界上应用最广泛的图表绘制工具——excel相比,不免给人以陌生的感觉。ms excel是一个相当强大的图表引擎,支持的图表类型非常丰富,而且提供了完备的图表布局调整功能。

正因为如此,所以本文要讨论的主角是owc,即office web components,或者“office web组件”。按照微软的定义,owc是一种“将类似office的功能扩展到web的微软技术”。它可以在客户端使用,例如我们将excel工作表保存为web页面时就要用到,利用它可以方便地将交互式电子表格和图表发布到web页面。同时,owc也是一个优秀的服务器端图表引擎,具有与ms excel同样强大的图表绘制能力。

三、owc的许可证问题

如果你曾经用过版本较早的owc,可能已经遇到过微软的许可证问题。以前这个问题相当令人烦恼,微软不仅要求服务器上必须有office许可证,而且每一台客户pc上也同样要有。

实际上,这相当于将owc的用途局限到了intranet之内,只有intranet之内才可以保证客户pc上都安装了office许可证。不过现在微软的态度有所放缓——服务器上仍旧要安装office许可证,但只要图表是“非交互式”用途,例如本文的服务器端图表绘制,客户端就不必再装office许可证。实际上,就连服务器端也不必安装完整的office许可证,excel 2002或frontpage 2002的许可证就已足够,从而使owc变成了价廉物美的服务器端图表引擎。

那么,在服务器上安装ms office?不,没有必要。虽然从许可证条件看,owc应该是office的一部分,但从技术上说,owc是一个独立的产品。web服务器上只需安装owc软件包,不必安装整个office。

owc首次出现于office 2000,即owc 9.0。在office xp中,owc的编程模式已作了修改,这使得owc xp(也就是owc 10)不能与owc 9.0完全兼容。owc 10要求在asp.net环境中运行,所以owc 10软件包必须安装到asp.net服务器上。

接下来,很自然的一个问题是:哪里可以下载owc 10软件包?令人惊奇的是,它可以从微软的网站免费下载,地址是http://office.microsoft.com/downloads/2002/owc10.aspx,
(中文地址:http://www.microsoft.com/downloads/details.aspx?displaylang=zh-cn&familyid=982b0359-0a86-4fb2-a7ee-5f3a499515dd 网际浪子注)但要注意的是,web服务器上必须安装了某种office 2002的许可证才能合法地使用owc 10。

四、owc的运行机制

owc是一组com(activex)控件的集合,涵盖电子表格、图表、数据透视表等功能。它经常被当作客户端技术使用,这时com控件就安装在客户端pc上。如果在服务器端使用,人们主要感兴趣的是它的图表绘制功能。

有了owc,我们可以在asp.net web服务器上动态创建一个图表,然后将图表以gif图形的形式发送到客户端。客户端看到的仅仅是一个普通的图形文件,但在“背后”,图形文件实际上是由服务器上asp.net回应客户请求时动态生成的。因此,这种技术对客户端没有特殊的要求,只要能够显示gif图形就可以了,即使netscape和opera也不存在任何问题。

既然如此,为什么在asp.net开发领域中,owc这一优秀的微软技术尚未被广泛采用呢?微软根本不为owc作市场宣传,再加上令人迷惑的许可证问题,当然令许多开发者望而却步。也许微软认为该产品还没有完全成熟,即将到来的office 2003将会带来owc 11,它的编程模式还会有所改变。另外,还有一种可能是微软担心owc技术的广泛采用会影响office的销售。

再者,关于owc的编程实例很少。微软知识库有几个客户端的例子和“传统”asp的服务器端例子,但找不到在asp.net环境中使用owc 10的例子。owc的新闻组,microsoft.public.office.developer.web.components,主要讨论的也是客户端的应用。如果你要在asp.net环境中使用owc 10,主要还是靠自己摸索。正是因为这些原因,所以本文从相当广泛的角度探讨了该技术的实际应用。

五、在web服务器上安装owc 10

要想在asp.net web服务器上用owc绘制图表,首先应当安装必要的软件和修改一些配置。

第一,web服务器上当然应该有asp.net运行环境。除了.net framework redistributable,还要有gacutil程序(属于.net框架sdk)来配置owc控件,也就是说,还要安装.net framework sdk工具。如果把.net framework 1.1 redistributable和sdk安装到了默认目录,path环境变量的内容应当包含:c:/windows/microsoft.net/framework/v1.1.4322;c:/program files/microsoft.net/sdk/v1.1/bin。

接下来再在web服务器上安装owc 10。owc可以从微软免费下载,安装时只要采用所有默认选项即可。

由于owc 10是一种com技术,为了让.net代码使用owc 10组件,还必须安装office xp的primary interop assembly(pia),pia可以从微软网站下载(http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnoxpta/html/odc_oxppias.asp)。
(网际浪子发现的地址是:http://www.microsoft.com/downloads/details.aspx?familyid=c41bd61e-3060-4f71-a6b4-01feba508e52&displaylang=en)
下载得到的oxppia.exe是一个压缩文件,现在把它解压缩到服务器上的一个目录,假设是c:/oxppia,然后启动一个命令窗口(注意,确保path环境变量已正确设置[网际浪子注:可以用我作的setpath.bat运行一下]),转到c:/oxppia目录,运行register.bat。

这个命令把office xp pia导入到全局程序集缓冲区,修改注册表设置。注意观察register.bat命令的输出,确信gacutil命令确实在运行。如果path环境变量设置有误,pia不可能正确导入。readme文档说应当用vs.net命令行环境,但web服务器上可能没有安装vs.net,这时就要手工修改path环境变量了(效果一样)。

最后,还要把下面这行代码加入web服务器的machine.config文件的<assemblies>节,对于.net framework 1.1,machine.config文件可以在c:/windows/microsoft.net/framework/v1.1.4322/config目录下找到:


<add assembly="microsoft.office.interop.owc, version=10.0.4504.0,
     culture=neutral, publickeytoken=31bf3856ad364e35"/>


浪子注明:如果发生不能编译的错误,可能要再次运行注册步骤!我这里这样,大家如果不一样,可以自己试试。

六、owc编程模式

为了在asp.net页面中显示一个owc图表,我们将创建一个简单的asp.net页面,该页面的唯一用途就是显示图表。web页面的名称是getchart.aspx。要在web页面中显示出图表,可以用一个标准的html <img>标记,如下所示:



<img src="getchart.aspx" />





getchart.aspx页面在服务器上动态生成owc图表,然后把图表转换成gif图形发送给客户端。因此,在客户端看来,getchart.aspx就相当于一个gif图形。

下面我们分析一下getchart.aspx文件。如果使用asp.net的codebehind机制,getchart.aspx实际上只要数条asp.net指令:



<%@ page language="vb" autoeventwireup="false"
codebehind="getchart.aspx.vb" inherits="getchart"%>
<%@ outputcache duration="5" varybyparam="none" %>




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



[浪子注明:如果出错,可能是文件夹权限的问题,我的就是,要将虚拟目录的everyone的全部权限加上!]



下面是实现这种功能的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>
国内最大的酷站演示中心!
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表