ASP中利用OWC控件绘制图表在页面动态绘制图表的问题。在asp中动态生成图表主要有2种方式,一是使用表格控制生成;另一种方式是使用office的owc控件生成图表。本文讨论的是如何实现在ASP中用OWC控件动态生成图表图片,保存在服务器端然后发送到浏览器显示,客户端浏览器只要支持标签就能显示图表,可避免直接输出动态图表到客户端时有可能带来的一系列问题。
* OWC简介
OWC是Office Web Compent的缩写,即Microsoft的Office Web组件,它为在Web中绘制图形提供了灵活的同时也是最基本的机制。通过在ASP页面中调用OWC,我们可以轻松地绘制出各种类型的实时图表。
* 下载及安装
下载owc10.exe或owc11.exe文件安装到服务器。
也可以从office上安装。我们需要一个正版授权的Office,然后在Web服务器上运行setup程序。选择定制安装,在工具标题下,只选择中Web组件选项。当然,我们也可以在Web 服务器上安装Office的完整版本,其中自然也就包含了Web组件。接着,Setup程序顺序地完成其它工作,包括组件注册。
下面以在asp页面中生成柱状图为例,说明如何在asp页面中实现图表显示。更多设置请参考安装完成后C:\Program Files\Common Files\Microsoft Shared\Web Components\10\2052中的帮助文档。
aspchart.asp源程序代码如下,本人调试通过。需要注意的是生成的图片要存放服务器的文件夹下,需要这个文件夹的写权限。<%@ Language=VBScript codepage=65001 %>
<%
'测试数据
categories=Array("10","20","30","40")
values=Array(11,22,3,5)
'创建owc对象
set chart=Server.CreateObject("OWC10.ChartSpace")
chart.clear
set chartShow=chart.Charts.Add
set chartConst = chart.Constants'设定图表类型,图表类型有很多种,详见OWC帮助文件ChartChartTypeEnum chartShow.type=chartConst.chChartTypeLine 'chChartTypeColumnStacked/chChartTypeColumnClustered
''设定图表是否有图例(Legend)
chartShow.HasLegend=false '(显示图例)
'以下为图表标题设定
chartShow.HasTitle=true
chartShow.Title.Caption="统计表"
set fnt=chartShow.title.font
fnt.size=13
fnt.bold=true
fnt.color="blue"
chartShow.Axes(0).HasTitle=True
chartShow.Axes(0).Title.Caption="T1"
chartShow.Axes(1).HasTitle=True
chartShow.Axes(1).Title.Caption="T2"
chartShow.Axes(1).Title.font.size=10
chartShow.Axes(0).MajorUnit = 5
chartShow.Axes(0).Scaling.Maximum=20
chartShow.SetDatachartConst.chDimCategories, chartConst.chDataLiteral, categories
chartShow.SeriesCollection(0).SetDatachartConst.chDimValues, chartConst.chDataLiteral, values
chartShow.SeriesCollection(0).Interior.Color = "Red"
'chartShow.Axes(chartConst.chAxisPositionLeft).NumberFormat = "0.00%"
'chartShow.Axes(chartConst.chAxisPositionLeft).MajorUnit = 25
'chartShow.Axes(chartConst.chAxisPositionLeft).GroupingUnit=1
'chartShow.Axes(chartConst.chAxisPositionValue).Scaling.Maximum=200
'以上语句定义Y轴最大值,缺省就是根据数据的范围自动定义
With chartShow.SeriesCollection(0).DataLabelsCollection.Add
.HasValue = true
.Font.Size = 9
' .Column.Color = RGB(255, 255, 0)
End With
strChartAbsPath=Server.MapPath("temp")'将图保存到当前路径下的temp文件夹。
strChartRelPath = "temp"
strChart = ExportChartToGIF(chart, strChartAbsPath, strChartRelPath,400,300)
'*****************************
'生成图片的函数
'*****************************
Function ExportChartToGIF(objCSpace, strAbsFilePath, strRelFilePath,picHigh,picWidth)Dim strFileName
Randomize
strFileName = Timer&Rnd&".gif"
'response.writestrAbsFilePath& "/" &strFileName
objCSpace.ExportPicturestrAbsFilePath& "/" &strFileName,"gif",picHigh, picWidthExportChartToGIF = strRelFilePath&"/" &strFileName
End Function
%>