在vb组件内调用excel2000实现GIF饼图 
  
http://www.tongyi.net    点击:405   
在vb组件内调用excel2000实现GIF饼图   当我第一次使用excel的时候,就为excel的图表功能所倾倒,实在强大,并且那些图也挺漂亮了。后来我尝试着在vb里面调用excel所支持的vba功能,发现功能的确强大,就是十分繁琐。后来就考虑用vb在excel外面包一层,写成对象,去掉我们不需要的特性。这样掉用起来就方便多了,所谓一劳永逸 :P。   在这里,我将像大家介绍一个用vb编写的饼图组件,你只需要给它几个简单的参数,就可以生成一副GIF格式的图片给你。调用例子如下:          Dim obj      Set obj = CreateObject("ChinaaspChart.pie")      obj.AddValue "男", 150      obj.AddValue "女", 45      obj.AddValue "不知道", 15      obj.ChartName = "性别比例图"      obj.FileName = "d:\123.gif"      obj.SaveChart   除了在vb里面可以调用,这段代码同样也可以在asp里面调用。       下面请follow me 编写我们的组件。    1.New project , 请选择activex dll,在project explorer面板上选择project1,然后在属性面板上修改其name为ChinaASPChart。同样把里面的class modules修改为pie
     2.保存该project,将project存为chinaaspchart.vbp,将class1.cls存为pie.cls。
     3.菜单project,选择菜单项References,然后请把Microsoft Active Server Pages Ojbect Library、Microsoft Excel 9.0 Object Library、COM+ Services Type Library选上。 注意:在NT4/win98上没有COM+ Service Type Library这个东东,应该选Microsoft Transaction Server Type Library
     4.编辑pie.cls,代码如下:
 
    '-------------------------------------------------------------------------------    Dim xl   Dim m_chartName   Dim m_chartData()   Dim m_chartType   Dim m_fileName   Public ErrMsg   Public foundErr   Dim iCount   Type m_Value       label As String       value As Double   End Type   Dim tValue As m_Value   Public Property Let ChartType(ChartType)       m_chartType = ChartType   End Property   Public Property Get ChartType()       ChartType = m_chartType   End Property
    Public Property Let ChartName(ChartName)       m_chartName = ChartName   End Property   Public Property Get ChartName()       ChartName = m_chartName   End Property   Public Property Let FileName(fname)       m_fileName = fname   End Property   Public Property Get FileName()       FileName = m_fileName   End Property        Public Sub AddValue(label, value)       iCount = iCount + 1       ReDim Preserve m_chartData(iCount)       tValue.label = label       tValue.value = value       m_chartData(iCount) = tValue   End Sub   Public Sub SaveChart()       On Error Resume Next       Dim iSheet       Dim i       Set xl = New Excel.Application       xl.Application.Workbooks.Add       xl.Workbooks(1).Worksheets("sheet1").Activate       If Err.Number <> 0 Then           foundErr = True           ErrMsg = Err.Description           Err.Clear       Else           xl.Workbooks(1).Worksheets("sheet1").Cells("2,1").value = m_chartName           For i = 1 To iCount               xl.Worksheets("Sheet1").Cells(1, i + 1).value = m_chartData(i).label               xl.Worksheets("Sheet1").Cells(2, i + 1).value = m_chartData(i).value           Next           xl.Charts.Add           xl.ActiveChart.ChartType = m_chartType           xl.ActiveChart.SetSourceData xl.Sheets("Sheet1").Range("A1:" & Chr((iCount Mod 26) + Asc("A")) & "2"), 1           xl.ActiveChart.Location 2, "Sheet1"           With xl.ActiveChart               .HasTitle = True               .ChartTitle.Characters.Text = m_chartName           End With           xl.ActiveChart.ApplyDataLabels 2, False, _               True, False           With xl.Selection.Border               .Weight = 2               .LineStyle = 0           End With                          xl.ActiveChart.PlotArea.Select           With xl.Selection.Border               .Weight = xlHairline               .LineStyle = xlNone           End With           xl.Selection.Interior.ColorIndex = xlNone                      xl.ActiveWindow.Visible = False                      xl.DisplayAlerts = False                  xl.ActiveChart.Export m_fileName, FilterName:="GIF"           xl.Workbooks.Close           If Err.Number <> 0 Then               foundErr = True               ErrMsg = ErrMsg               Err.Clear           End If       End If       Set xl = Nothing   End Sub   Private Sub Class_Initialize()       iCount = 0       foundErr = False       ErrMsg = ""       m_chartType = -4102 'xl3DPie                     '54 '柱状图   End Sub   '------------------------------------------------------------------------------- 
    5. 如果实现柱状图?     实际上前面的代码已经实现了柱状图的功能,只是缺省是饼图功能。调用代码改成如下:
    Dim obj   Set obj = CreateObject("ChinaaspChart.pie")   obj.AddValue "男", 150   obj.AddValue "女", 45   obj.AddValue "不知道", 15   obj.ChartName = "性别比例图"   obj.FileName = "d:\123.gif"   obj.ChartType=54   obj.SaveChart
     6. 在asp里面调用该组件画图并显示它需要注意的地方。     (1)图片必须生成在web目录下。     (2)asp程序运行在多用户环境下,必须加锁处理      可以通过application实现。其逻辑如下:
   if application("标志")=0 then     显示图片    else         application.lock     生成图片     显示图片         application("标志")=0        application.unlock    end if   当然何时需要生成图片置标志位,就需要您自己根据程序的要求来确定了。   
  总结:   COM里面调用office组件是一个十分有用的技巧,它的优点是开发相对简单,使用方便,适合企业级低访问量,高业务要求的应用,缺点是占用系统资源高。   程序在Windows 2000 Server + Office 2000 + VB6.0 上测试通过。  
 
  |