利用OWC伺服器端組件動態組建圖表

來源:互聯網
上載者:User
動態|伺服器|圖表 利用OWC伺服器端組件動態組建圖表

以前在這裡也曾經有一些文章談到了在ASP中產生動態圖表的問題,但那些文章中所談到的一些方法都有某些方面的限制,如需要在用戶端安裝office2000或安裝OWC,有些則可能在Intranet中使用時沒什麼問題,但在通過Internet訪問的時候,就可能出現無法正常工作的現象(這主要和SQL Server的安全設定有關)。那麼,我們如何來避免這些問題呢?有一個很好的方法,就是將在ASP中產生的圖錶轉換成圖片檔案儲存在伺服器上,這樣使用者最終看到的是GIF圖片格式的圖表,我想現在的任何一種瀏覽器在觀看GIF圖片的時候都沒什麼問題吧。:)也許唯一可能的問題就是如何對這些產生的臨時圖片檔案的處理問題,關於這個問題在最後我們會討論。
下面我們會用一個具體的執行個體來說明這種方法。程式的測試環境為:
NT4.0(SP5)+IIS4.0+SQL Server7.0+IE5.0,要運行下面的ASP程式,請將下面的代碼Copy,儲存到你的一個虛擬目錄中,在這個虛擬目錄中建立一個子目錄tmp(你可能修改代碼中的路徑以符合自己的路徑),在IIS中設定read許可權即可,注意了,在NT上你必須設定此tmp目錄對IUSR_servername使用者至少有Change的許可權。建立一個pubs的DSN指向SQL Server的pubs資料庫。
以下是代碼:
chart.asp
<%
Function ExportChartToGIF(cspace)
Dim fso
Dim sFilePath
Dim sFileName

'產生臨時檔案的檔案名稱
set fso = CreateObject("Scripting.FileSystemObject")
sFilePath = Request.ServerVariables("PATH_TRANSLATED")
sFilePath = left(sFilePath, InStrRev(sFilePath, "\"))
sFilePath = sFilePath & "tmp\"
sFileName = fso.GetTempName()
sFileName = sFileName & ".gif"
set fso=nothing
'將chart轉換成GIF檔案儲存在臨時目錄
m_cspace.ExportPicture sFilePath & sFileName, "gif", 200, 150

'將產生的臨時圖片報存在session中以便於刪除
Session("TC:" & sFilePath & sFileName) = sFilePath & sFileName
ExportChartToGIF = sFileName
End Function

Sub BindChartToDSC(cspace, dsc, sRSName, sCategories, sValues)
Dim cht
Dim ser

set c = cspace.Constants

cspace.Clear

' 綁定資料來源
set cspace.DataSource = dsc

cspace.DataMember = sRSName

set cht = cspace.Charts.Add()
cht.HasLegend = True
cht.Type = c.chChartTypePie

set ser = cht.SeriesCollection.Add()
ser.SetData c.chDimCategories, 0, sCategories
ser.SetData c.chDimValues, 0, sValues

set dls = ser.DataLabelsCollection.Add()
dls.HasPercentage = True
dls.HasValue = False

End Sub
%>
<html>

<head>
<meta name="GENERATOR" content="Microsoft FrontPage 4.0">
<meta name="ProgId" content="FrontPage.Editor.Document">
<title>利用OWC動態組建圖表</title>
</head>

<body>
<%
set m_cspace = server.CreateObject("OWC.Chart")
set DSC = server.CreateObject("OWC.DataSourceControl")
DSC.ConnectionString = "DSN=pubs;uid=sa"
DSC.RecordsetDefs.AddNew "select distinct state,num=COUNT(*) FROM authors GROUP BY state",DSC.Constants.dscCommandText,"ChartData"
BindChartToDSC m_cspace, DSC, "ChartData", "state", "num"
m_sFilePath = ExportChartToGIF(m_cspace)
set m_cspace=nothing
set m_cht=nothing
%>

<br><br>
<img src="tmp/<%= m_sFilePath %>">
</BODY>
</HTML>
其中我們會發現兩個有用的函數:ExportChartToGIF和BindChartToDSC
ExportChartToGIF(cspace)是一個用來將chart轉換成GIF檔案的函數
cspace:一個OWC.Chart的執行個體
BindChartToDSC(cspace, dsc, sRSName, sCategories, sValues)用來將一個Chart綁定到資料來源
cspace:OWC.Chart的執行個體
dsc:資料來源
sRSName:記錄集名稱
sCategories,sValues:Chart中每個系列的名稱欄位和相應的值的欄位名(說的好象不是很清楚,不過看看代碼你就明白了)
在使用伺服器端的OWC時,實際上和使用其它的組件沒什麼區別,都是用server.createobject來建立一個執行個體,再調用組件的方法和屬性。
OWC包括四個組件,他們的ProgID分別為:
OWC.Chart:圖表組件
OWC.SpreadSheet:工作表元件
OWC.DataSourceControl:資料來源組件
OWC.PivotTable:動態報表元件

最後說一下如何處理臨時的圖片檔案
在ExportChartToGIF漢書中你可以看到如下的代碼:
Session("TC:" & sFilePath & sFileName) = sFilePath & sFileName
我們將產生的圖片檔案路徑儲存在session中,然後在Session_OnEnd中添加如下的代碼:
Set fsoTemp = CreateObject("Scripting.FileSystemObject")
for each imagefile in Session.Contents
if left(imagefile,3) = "TC:" then
fsoTemp.DeleteFile mid(imagefile,4), True
end if
next
set fsoTemp=nothing

好了。終於寫完了,其中關於臨時檔案的處理的方法也許不是很好,如果你有更好的方法的話,請告訴我。希望這篇文章對大家都所協助:)



相關文章

E-Commerce Solutions

Leverage the same tools powering the Alibaba Ecosystem

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。