«
ASP中使用Office2000中的图表控件

时间:2008-5-31    作者:Deri    分类: 分享


   <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>