<p> 前一阵为了做图表,查看了论坛中的所有文章,但大都是用Aspchart,ShortGraph等组件,这些组件多半都是国外开发要money的。如果你用office 的MS Chart,往往作出的效果又差强人意。如果你使用过Office2000中Excel的图表的话,应该被其一流的效果所折服。 本文将演示如何通过ASP和VBScript来实现Microsoft Office Chart 9.0 的强大的功能和绝妙效果。</p><p> 示例中使用 ADO 记录集中的数据创建图表。首先根据返回的记录集数据创建以制表符分隔的字符串,然后通过 SetData 方法并使用此字符串设置图表数据。 </p><p> 源文件chart.asp : </p><code><HTML><br /><HEAD><br /><META NAME="GENERATOR" Content="Microsoft FrontPage 4.0"><br /></HEAD><br /><BODY><br /><object id=ChartSpace1 classid=CLSID:0002E500-0000-0000-C000-000000000046 style="width:80%;height:350"></object><br /><object id=ADOConnection1 classid=CLSID:00000514-0000-0010-8000-00AA006D2EA4></object><br /><script Language=VBScript><br />Sub Window_OnLoad()<br />Dim rs, categories, values<br />categories = ""<br />values = ""<br />" 打开连接执行sql查询 (建立“nwind.mdb”库,并创建名为“Category Sales for 1995”的表)<br />ADOConnection1.Open "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=c:\nwind.mdb"<br />Set rs = ADOConnection1.Execute("SELECT * FROM [Category Sales for 1995]")<br />" 对于每一字段记录产生一个由制表符分隔的字符串<br />rs.MoveFirst<br />Do while Not rs.EOF<br />categories = categories & rs.Fields(0).Value & Chr(9)<br />values = values & rs.Fields(1).Value & Chr(9)<br />rs.MoveNext<br />Loop<br />rs.Close<br />ADOConnection1.Close<br />" 删去字符串末尾的分隔符<br />categories = Left(categories, Len(categories) - 1)<br />values = Left(values, Len(values) - 1)<br />" 创建一个系列<br />ChartSpace1.Clear<br />ChartSpace1.Charts.Add<br />ChartSpace1.Charts(0).SeriesCollection.Add<br />ChartSpace1.Charts(0).SeriesCollection(0).Caption = "Sales"<br />" 使用recordset生成的字符串设置系列的类型和值<br />Set c = ChartSpace1.Constants<br />ChartSpace1.Charts(0).SeriesCollection(0).SetData c.chDimCategories, c.chDataLiteral, categories<br />ChartSpace1.Charts(0).SeriesCollection(0).SetData c.chDimValues, c.chDataLiteral, values<br />" 设置图表工作区的标题,并将图表工作区的图例放置于工作区的右边。<br />ChartSpace1.HasChartSpaceTitle = True<br />With ChartSpace1.ChartSpaceTitle<br />.Caption = "Monthly Sales Data"<br />.Font.Size = 12<br />.Font.Color = "#FF0000"<br />.Font.Bold = True<br />End with<br />ChartSpace1.HasChartSpaceLegend = True<br />With ChartSpace1.ChartSpaceLegend<br />.Position = c.chLegendPositionright<br />.Font.Color = "#009999"<br />.Font.Size = 9<br />End with<br />" 设置图表类型(具体样式见附录)<br />ChartSpace1.Charts(0).Type = c.chChartTypeBarClustered<br />" 轴的坐标格式、样式(有坐标轴时才设)<br />With ChartSpace1.Charts(0).Axes(c.chAxisPositionBottom)<br />.NumberFormat = "#,##0"<br />.Font.Size = 9<br />End with<br />With ChartSpace1.Charts(0).Axes(c.chAxisPositionLeft)<br />.Font.Color = "#0000ff"<br />.Font.Size = 9<br />End with<br />end if<br />End Sub<br /></script><br /></BODY><br /></HTML></code><p> 以上程序在Win98+PWS 下通过。 </p>
<p> </p>
<p> 通过以上的例程你可以根据你的需要,增加自己所需要的效果,一定能制作出极酷的统计图表来的,需要帮助可以参见微软的帮助文件(装了 Office2000 就有)Msowcvba.chm 以及MSDN 在线帮助。 </p><p> 有个缺点:客户端好像也要装Office2000 才行,另外我还没找到如何不安装 Office2000 来注册该组件的方法,如果那位高手知道,请告诉我 <a href="mailto:richard@zhujie.org">richard@zhujie.org</a> ,谢谢! </p><p> 附: </p><p> ChartChartTypeEnum Constants 图表类型常数(转至MSDN)</p><p> Constant Value</p><p> chChartTypeCombo -1</p><p> chChartTypeColumnClustered 0</p><p> chChartTypeColumnStacked 1</p><p> chChartTypeColumnStacked100 2</p><p> chChartTypeBarClustered 3</p><p> chChartTypeBarStacked 4</p><p> chChartTypeBarStacked100 5</p><p> chChartTypeLine 6</p><p> chChartTypeLineMarkers 7</p><p> chChartTypeLineStacked 8</p><p> chChartTypeLineStackedMarkers 9</p><p> chChartTypeLineStacked100 10</p><p> chChartTypeLineStacked100Markers 11</p><p> chChartTypeSmoothLine 12</p><p> chChartTypeSmoothLineMarkers 13</p><p> chChartTypeSmoothLineStacked 14</p><p> chChartTypeSmoothLineStackedMarkers 15</p><p> chChartTypeSmoothLineStacked100 16</p><p> chChartTypeSmoothLineStacked100Markers 17</p><p> chChartTypePie 18</p><p> chChartTypePieExploded 19</p><p> chChartTypePieStacked 20</p><p> chChartTypeScatterMarkers 21</p><p> chChartTypeScatterSmoothLineMarkers 22</p><p> chChartTypeScatterSmoothLine 23</p><p> chChartTypeScatterLineMarkers 24</p><p> chChartTypeScatterLine 25</p></p><p> chChartTypeScatterLineFilled 26</p><p> chChartTypeBubble 27</p><p> chChartTypeBubbleLine 28</p><p> chChartTypeArea 29</p><p> chChartTypeAreaStacked 30</p><p> chChartTypeAreaStacked100 31</p><p> chChartTypeDoughnut 32</p><p> chChartTypeDoughnutExploded 33</p><p> chChartTypeRadarLine 34</p><p> chChartTypeRadarLineMarkers 35</p><p> chChartTypeRadarLineFilled 36</p><p> chChartTypeRadarSmoothLine 37</p><p> chChartTypeRadarSmoothLineMarkers 38</p><p> chChartTypeStockHLC 39</p><p> chChartTypeStockOHLC 40</p><p> chChartTypePolarMarkers 41</p><p> chChartTypePolarLine 42</p><p> chChartTypePolarLineMarkers 43</p><p> chChartTypePolarSmoothLine 44</p><p> chChartTypePolarSmoothLineMarkers 45</p></p>