ASP 中利用OWC 服务器端组件动态生成图表

动态|服务器|图表

  引:Web程序开发中,经常需要从数据库表文件中提取数据,并对大批量的数据进行分析比较,此时最常用也是最直观明了的表现方法莫过于绘制图表。

  ASP擅长服务器端的Web编程,操作后台数据库更是它的强项。但是用ASP制作实时数据库图表有点困难,因为ASP本身并不支持图表功能,只能借助第三方控件进行开发,如VB的MSChart 控件。而微软推出的实时数据库图表制作组件—— O W C(Microsoft Office Web Components),为在Web中绘制图形提供了灵活的同时也是最基本的机制。通过在ASP页面中调用OWC,我们可以轻松地绘制出各种类型的实时图表。

  本文同时介绍了一种方法,就是将在ASP中生成的图表转换成图片文件保存在服务器上,这样用户最终看到的是GIF图片格式的图表,可避免直接输出动态图表到客户端时有可能带来的一系列问题。同时,本文还介绍了一种简单而迅速地移走过期GIF 图片的方法。

  下面我们会用一个具体的实例来说明以上的内容。

  程序的测试环境为:Windows 2000Server +IIS5.0+Access+IE5.5中,要运行下面的ASP 程序,请将下面的代码Copy,保存到你的一个虚拟目录中,在这个虚拟目录中建立一个子目录tmp(你可能修改代码中的路径以符合自己的路径),在IIS中设置read权限即可,注意在Windows 2000 Server 上你必须设置此tmp目录对IUSR_servername用户至少有Change 的权限。

  ⒈OWC支持近50 种图表类型,包括曲线图、折线图、柱状图、面积图、雷达图等,并给指定显示图表是否带数据点。

  ⒉ 可以灵活设置图表的各个元素,包括设置图表标题、左标注、下标注、图例及输出图片的大小等;并可对所有显示的文字指定字体、字号、颜色和字形。

  ⒊同一张图表中显示2 条以上的曲线,实现数据对比显示。

  尽管OWC的相关文件很零散,但是安装过程很简单。我们需要一个正版授权的Office 2000,然后在Web服务器上运行setup程序。选择定制安装,在工具标题下,只选中Web组件选项。当然,我们也可以在Web服务器上安装Office 2000的完整版本,其中自然也就包含了Web组件。接着,Setup程序顺序地完成其它工作,包括组件注册。

  OWC的制图操作是在一个图表空间进行的。一个图表空间可以包含一个或多个图表,每个图表都可能包含一个或多个数列,每个数列都可以包含一个或多个数据点。根据这个原理,首先创建一个图表空间对象,然后用它的Add 方法向图表空间的图表集合中增加一个图表。进行组件调用时,在ASP 文件中加入如下代码即可:

  s e t c h a r t = S e r v e r .CreateObject("OWC.Chart")

  chart.clear

  set ochart=chart.Charts.Add

  set oconst = chart.Constants

  最后一行代码的目的是为了引用方便起见:图表空间有一个Constants属性,其中包含所有相关图表函数中使用的列举常数;每次想要引用一个常数时,就可以键入o c o n s t 而不是o b j C h a r t S p a c e .Constants,这样效率会更高,至少从时间上讲是这样。关于常数的完整描述,我们结合下面图表元素一起介绍。

  图表标题描述图表的标题(图1)。本标题可以位于图表的上方、下方、左方或右方。

  

  oChart.HasTitle=true (指定是否显示图表标题)

  oChart.Title.Caption=“预计与实际销售额” (指定显示的内容)

  oChart.Title..Position =“Center”(指定位于图表的位置)

  set fnt=ochart.title.font

  fnt.name=“黑体”(指定图表标题的字体)

  fnt.size=“10”(指定图表标题的字号)

  fnt.color=“#000000”(指定图表标题的颜色)

  fnt.bold=true(指定图表标题的字形——加粗)

  fnt.italic=true(指定图表标题的字形——斜体)

  数值(Y)轴标题是用于描述数值轴度量内容的标题。

  s e t a x = o c h a r t . A x e s ( o c o n s t .chCategoryAxis)

  ax.hastitle=true (显示数值轴标题)

  ax.Title.Caption= “销售额(单位:百万)”(设置数值轴标题的内容)

  set fnt=ax.title.font (以下为设置数值轴标题的字体、字号、颜色、字形)

  fnt.name=“黑体”

  fnt.size=“10”

  fnt.color=“#000000”

  fnt.bold=true

  fnt.italic=true

  数值(Y)轴标志也称为刻度线标志。这些标志描述了数值轴上的度量值。

  ax.MajorTickMarks = oconst.chTickMarkNone(不显示数值轴主要刻度线)

  ax.MajorGridlines.Line.Color ="white" (设置指定坐标轴上主网格线的颜色和线宽)

  ax.MajorGridlines.Line.Weight = 5

  分类(X)轴标题它是用于描述分类轴绘制内容的标题。

  s e t a x = o c h a r t . A x e s ( o c o n s t .chAxisPositionBottom)

  ax.hastitle=true(显示分类轴标题)

  ax.Title.Caption= “季度”(设置分类轴标题的内容)

  set fnt=ax.title.font(以下为设置分类轴标题的字体、字号、颜色、字形)

  fnt.name=“黑体”

  fnt.size=“10”

  fnt.color=“#000000”

  fnt.bold=true

  fnt.italic=true

  分类(X)标志也称为刻度线标志。这些标志显示了分类轴上的分类名称。分类是由图表中每个数据系列的一个数据点构成的一组相关数据点。

  a x . P o s i t i o n = o c o n s t .chAxisPositionBottom (指定分类标志的显示位置,对有些图表显示类型,该设定不起作用。指定图表显示类型为折线型时可看到设定的效果)

  分类标志显示内容的设置见“数据标志”。

  图例为图表中数据系列或分类指定的图案或颜色标示。

  ochart.HasLegend=True(显示图例)

  oChart.Legend.Position = oconst.

  chLegendPositionLeft (设置图例的位置在左边,位置可修改)

  系列名称是一个名称,用于描述构成一个数据系列的一组相关数据点。系列名称显示在图例项标识旁的图例中。在前面的图表示例中,“预计”和“实际”都是对应于图表中数据标记的系列名称。

  set fnt=oChart.Legend.Font (以下为设置系列名称的字体、字号、颜色、字形)

  fnt.name=“黑体”

  fnt.size=“10”

  fnt.color=“#000000”

  fnt.bold=true

  fnt.italic=true

  数据标志它是用于提供有关数据标记附加信息的标志,而其中的数据标记则代表单个数据点或值。对于不同的图表类型,数据标志可以显示值、数据系列或分类的名称、百分比,或者显示这些项的组合。

  set oseries(i)=oChart.SeriesCollection.add ' 生成一条series 曲线

  with oseries(i)

  .DataLabelsCollection.Add(在指定系列中添加数据标志)

  .caption=“XXXX”(设置分类标志显示的具体内容)

  .SetData oconst.chDimCategories,oconst.chDataLiteral,XXX (设置X轴的数据值)

  .SetData oconst.chDimValues,oconst.chDataLiteral,XXX(设置Y 轴的数据值)

  .type=0(设置图表显示的类型,0 表示普通柱形图)

  end with

  对照图片,我们可以知道,X 轴为日期(季度),Y轴为销售额,绘图区为具体的销售额数据。

  OWC支持在同一张图表中显示两条以上的曲线(或两个不同颜色的柱子,如上图所示的预计与实际)。因此,要生成我们所看到的图片,只需先生成一条series 曲线(即在绘图区中先绘出预计的销售额图表),然后再添加一条series曲线(即在绘图区中绘出实际的销售额图表)就行了

  先定义及设置参数

  dim strChartAbsPath

  dim strChartRelPath

  strChartAbsPath = Server.MapPath("temp")

  strChartRelPath = "temp"

  以下是生成、删除图片的函数

  Function ExportChartToGIF(objCSpace, strAbsFilePath, strRelFilePath)

  Dim strFileName

  Randomize

  strFileName = Timer & Rnd & ".gif"

  o b j C S p a c e . E x p o r t P i c t u r estrAbsFilePath & "/" & strFileName, "gif",300(图片高度), 500(图片宽度,以上两值均可由程序动态设置))

  ExportChartToGIF = strRelFilePath &"/" & strFileName

  End Function

  Function CleanUpGIF(GIFpath)

  Dim objFS

  Dim objFolder

  Dim gif

  set objFS = Server.CreateObject("Scripting.FileSystemObject")

  set objFolder = objFS.GetFolder(GIFpath)

  for each gif in objFolder.Files

  if instr(gif.Name, ".gif") > 0

  a n d D a t e D i f f ( " d " ,g i f .DateLastModified, now) > 5 (如果图片生成的时间已超过5 天,则删除它) then

  objFS.DeleteFile GIFpath & "\" &gif.Name, True

  end if

  i=i+1

  next

  set objFolder = nothing

  set objFS = nothing

  End Function

  以下是调用代码

  strChartFile = ExportChartToGIF(chart, strChartAbsPath, strChartRelPath)

  Response.Write "<p align='center'><IMG SRC=""" & strChartFile & """>" &"</P>"

  ⋯⋯

  CleanUpGIF(strChartAbsPath)

  ⋯⋯

  虽然用OWC 生成的图表功能齐全,界面美观,但它也存在着不少缺陷。

  首先,OWC只支持RecordSet数据集,不支持DataSet 数据集,因此在检索时不能使用sqlCommand、sqlDataAdapter 等对象,只能使用RecordSet对象进行检索。

  其次,由于不支持DataSet数据集,这样我们就无法在生成图表的同时使用DataGrid显示数据表,而只能用循环依次取出Recordset记录集中的全部数据后,手工生成表格。

  最后,在同一张图表中绘制的曲线只能是同一种类型,或同为平滑曲线图,或同为柱状图,它不能在同一张图表中显示不同类型的曲线。

时间: 2024-08-01 21:41:06

ASP 中利用OWC 服务器端组件动态生成图表的相关文章

利用OWC服务器端组件动态生成图表

动态|服务器|图表 利用OWC服务器端组件动态生成图表 以前在这里也曾经有一些文章谈到了在ASP中生成动态图表的问题,但那些文章中所谈到的一些方法都有某些方面的限制,如需要在客户端安装office2000或安装OWC,有些则可能在Intranet中使用时没什么问题,但在通过Internet访问的时候,就可能出现无法正常工作的现象(这主要和SQL Server的安全设置有关).那么,我们如何来避免这些问题呢?有一个很好的方法,就是将在ASP中生成的图表转换成图片文件保存在服务器上,这样用户最终看到

ASP中利用OWC控件实现图表功能详解

控件|图表|详解 在ASP中利用OWC(Office Web Components)控件可轻松实现各种图表功能,如饼图,簇状柱型图,折线图等. 在下面的代码中我详细的给出了饼图,簇状柱型图,折线图的使用方法.OWC的更多功能,属性可参加MSOWCVBA.chm帮助文件(在office 2000的文件夹下大家自己找). testOWC.asp <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <

ASP中利用OWC控件实现各种统计图

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=gb2312"> <title>ASP中利用OWC控件实现各种统计图</title> </hea

asp中利用数组实现数据库记录的批量录入方法

数据|数据库|数组 asp中利用数组实现数据库记录的批量录入方法(原创) 演示:http://www.zwtd.com/1/yanek/n/needdj2.asp <% rem 文章题目 asp中利用数组实现数据库记录的批量录入方法(原创)作者:yanek联系email:aspboy@263.net%> 包括两个文件 1.allneeddj.asp:实现表单的生成 2. allneeddjresult.asp 处理表单批量录入 3.hbedu.mdb :数据库文件 其数据库结构如下 provi

asp中利用数组实现数据库记录的批量录入方法(原创),有演示,建议入精华

精华|数据|数据库|数组|原创 asp中利用数组实现数据库记录的批量录入方法(原创)演示:http://www.zwtd.com/1/yanek/n/needdj2.asp<%rem 文章题目 asp中利用数组实现数据库记录的批量录入方法(原创)作者:yanek联系email:aspboy@263.net%> 包括两个文件1.allneeddj.asp:实现表单的生成2. allneeddjresult.asp 处理表单批量录入3.hbedu.mdb :数据库文件其数据库结构如下provinc

在ASP中利用Oracle Object for OLE访问Oracle 8

object|oracle|访问 ASP(Active Server Pages)是微软公司为开发互联网络应用程序所提出的工具之一,它是一种类似HTML(Hypertext Markup Language超文本标记语言).Script与CGI(Common Gateway Interface通用网关接口)的结合体,但是其运行效率却比CGI更高.程序编制也比HTML更方便且更有灵活性,程序安全性及保密性远比Script好.因此ASP是目前网页开发技术中最容易学习.灵活性最大的开发工具. ASP内置

在ASP中利用“正则表达式” 对象实现UBB风格的论坛

ubb|对象|正则 上一次,我们谈到在ASP中如何利用"正则表达式"对象来实现各种数据的校验,文中描述了正则表达式对象的强大功能,接下来,我们来看看有关"正则表达式"对象的其他功能.当我们在网上冲浪的时候,尤其是浏览各类论坛的时候,经常会见到"UBB代码"这个词语.什么是UBB代码呢?UBB代码是HTML的一个变种http://www.alixixi.com/program/a/,是Ultimate Bulletin Board (国外一个BBS

ASP中利用“正则表达式” 对象实现UBB代码

ubb|对象|正则 上一次,我们谈到在ASP中如何利用"正则表达式"对象来实现各种数据的校验,文中描述了正则表达式对象的强大功能,接下来,我们来看看有关"正则表达式"对象的其他功能.当我们在网上冲浪的时候,尤其是浏览各类论坛的时候,经常会见到"UBB代码"这个词语.什么是UBB代码呢?UBB代码是HTML的一个变种http://www.alixixi.com/program/a/,是Ultimate Bulletin Board (国外一个BBS

在ASP中利用正则表达式 对象实现UBB风格的论坛(转)

ubb|对象|正则 在ASP中利用"正则表达式" 对象实现UBB风格的论坛     转贴者语:无意中在中华网发现了此文,说的就是本站论坛的UBB风格的实现原理,所以贴出来和大家一起分享. 我们谈到在ASP中如何利用"正则表达式"对象来实现各种数据的校验,文中描述了正则表达式对象的强大功能,接下来,我们来看看有关"正则表达式"对象的其他功能.当我们在网上冲浪的时候,尤其是浏览各类论坛的时候,经常会见到"UBB代码"这个词语.什么