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)。本标题可以位于图表的上方、下方、左方或右方。

  ASP

  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记录集中的全部数据后,手工生成表格。

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

  • 0
    点赞
  • 1
    收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页
评论
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值