在vb組件內調用excel2000實現GIF餅圖
發表于:2007-07-14來源:作者:點擊數:
標簽:
當我第一次使用excel的時候,就為excel的圖表功能所傾倒,實在強大,并且那些圖也挺漂亮了。后來我嘗試著在 vb 里面調用excel所支持的vba功能,發現功能的確強大,就是十分繁瑣。后來就考慮用vb在excel外面包一層,寫成對象,去掉我們不需要的特性。這樣掉用
當我第一次使用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 上
測試通過。
原文轉自:http://www.anti-gravitydesign.com