分享
 
 
 

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

王朝asp·作者佚名  2006-11-24
窄屏简体版  字體: |||超大  

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

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

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有