?? 在vb組件內(nèi)調(diào)用excel2000實(shí)現(xiàn)gif餅圖(原創(chuàng)哦).txt
字號(hào):
作者:飛鳥(niǎo)
email: flybird@chinaasp.com
日期:00-7-3 下午 04:57:15
[b]在vb組件內(nèi)調(diào)用excel2000實(shí)現(xiàn)GIF餅圖[/b]
當(dāng)我第一次使用excel的時(shí)候,就為excel的圖表功能所傾倒,實(shí)在強(qiáng)大,并且那些圖也挺漂亮了。后來(lái)我嘗試著在vb里面調(diào)用excel所支持的vba功能,發(fā)現(xiàn)功能的確強(qiáng)大,就是十分繁瑣。后來(lái)就考慮用vb在excel外面包一層,寫(xiě)成對(duì)象,去掉我們不需要的特性。這樣掉用起來(lái)就方便多了,所謂一勞永逸 :P。
在這里,我將像大家介紹一個(gè)用vb編寫(xiě)的餅圖組件,你只需要給它幾個(gè)簡(jiǎn)單的參數(shù),就可以生成一副GIF格式的圖片給你。調(diào)用例子如下:
[i] 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[/i]
除了在vb里面可以調(diào)用,這段代碼同樣也可以在asp里面調(diào)用。
下面請(qǐng)follow me 編寫(xiě)我們的組件。
1.New project , 請(qǐng)選擇activex dll,在project explorer面板上選擇project1,然后在屬性面板上修改其name為ChinaASPChart。同樣把里面的class modules修改為pie
2.保存該project,將project存為chinaaspchart.vbp,將class1.cls存為pie.cls。
3.菜單project,選擇菜單項(xiàng)References,然后請(qǐng)把Microsoft Active Server Pages Ojbect Library、Microsoft Excel 9.0 Object Library、COM+ Services Type Library選上。
注意:在NT4/win98上沒(méi)有COM+ Service Type Library這個(gè)東東,應(yīng)該選Microsoft Transaction Server Type Library
4.編輯pie.cls,代碼如下:[QUOTE]
[i] '-------------------------------------------------------------------------------
Dim xl
Dim m_chartName
Dim m_chartData()
Dim m_chartType
Dim m_fileName[/i]
[i] Public ErrMsg
Public foundErr
Dim iCount[/i]
[i] Type m_Value
label As String
value As Double
End Type[/i]
[i] Dim tValue As m_Value[/i]
[i] Public Property Let ChartType(ChartType)
m_chartType = ChartType
End Property[/i]
[i] Public Property Get ChartType()
ChartType = m_chartType
End Property[/i]
[i] Public Property Let ChartName(ChartName)
m_chartName = ChartName
End Property[/i]
[i] Public Property Get ChartName()
ChartName = m_chartName
End Property[/i]
[i] Public Property Let FileName(fname)
m_fileName = fname
End Property[/i]
[i] 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[/i]
[i] 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[/i]
[i] 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[/i]
[i] Private Sub Class_Initialize()
iCount = 0
foundErr = False
ErrMsg = ""
m_chartType = -4102 'xl3DPie
'54 '柱狀圖
End Sub
'------------------------------------------------------------------------------- [/i][/QUOTE]
5. 如果實(shí)現(xiàn)柱狀圖?
實(shí)際上前面的代碼已經(jīng)實(shí)現(xiàn)了柱狀圖的功能,只是缺省是餅圖功能。調(diào)用代碼改成如下:[QUOTE]
[i] 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[/i][/QUOTE]
6. 在asp里面調(diào)用該組件畫(huà)圖并顯示它需要注意的地方。
(1)圖片必須生成在web目錄下。
(2)asp程序運(yùn)行在多用戶環(huán)境下,必須加鎖處理
可以通過(guò)application實(shí)現(xiàn)。其邏輯如下:[QUOTE]
[i] if application("標(biāo)志")=0 then
顯示圖片
else
application.lock
生成圖片
顯示圖片
application("標(biāo)志")=0
application.unlock
end if[/i]
當(dāng)然何時(shí)需要生成圖片置標(biāo)志位,就需要您自己根據(jù)程序的要求來(lái)確定了。
[/QUOTE]
[b]總結(jié):
[/b] COM里面調(diào)用office組件是一個(gè)十分有用的技巧,它的優(yōu)點(diǎn)是開(kāi)發(fā)相對(duì)簡(jiǎn)單,使用方便,適合企業(yè)級(jí)低訪問(wèn)量,高業(yè)務(wù)要求的應(yīng)用,缺點(diǎn)是占用系統(tǒng)資源高。
程序在Windows 2000 Server + Office 2000 + VB6.0 上測(cè)試通過(guò)。
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -