如何在ASP.NET中用OWC繪製圖表(1)

來源:互聯網
上載者:User
asp.net|圖表 如何在ASP.NET中用OWC繪製圖表 (1)

一、概述

二、設定圖表引擎

三、OWC的許可證問題

四、OWC的運行機制

五、在Web伺服器上安裝OWC 10

六、OWC編程模式

━━━━━━━━━━━━━

本文:

━━━━━━━━━━━━━

一、概述

在開發應用程式時,經常會遇到必須提供互動式圖表的情況。例如,你可能在開發一個管理銷售和產品資料的應用程式,資料儲存在SQL Server資料庫上,應用程式允許使用者添加資料、更新現有資料,但除了這些功能之外,客戶還要求應用程式能夠用餅圖、直條圖或XY散佈圖的形式直觀地描述資料。

在Windows傳統型應用程式中,這類要求從來不成為問題,可供選用的圖形庫和繪圖組件實在太多了。但對於Web應用程式,問題就變得複雜多了。要在Web應用中繪製圖表,可供選擇的辦法包括:

■ 用戶端:

利用各種ActiveX組件,Web瀏覽器內完全有可能達到“豐富”Windows客戶程式那樣的功能。缺點是用戶端的設定複雜化,要求發布用戶端軟體,通常按照每用戶端的方式計算許可證費用。另外,非MS Windows/IE的用戶端一般難以運行。

■ 伺服器端:

利用Web伺服器上啟動並執行伺服器端代碼,動態地組建圖表,然後以GIF或JPG圖形的形式發送給用戶端。這種辦法的優點是,用戶端只需要一個標準的瀏覽器。與用戶端技術相比的缺點是,圖形的互動能力差(除非向伺服器提交新的請求,否則就不能縮放、滾動)。許多地圖網站(例如Mapquest.com)大量地運用了這一技術。注意,地圖圖形不是儲存在Web伺服器上,而是使用者發出一個請求時動態從地圖資料庫產生。

本文主要討論如何利用伺服器端的圖表繪製技術在ASP.NET Web頁面中提供圖形功能,具體地說,本文分析了如何利用MS SQL資料庫中儲存的資料產生一個散佈圖。

二、設定圖表引擎

如果要在ASP.NET應用程式中繪製圖表,必須要有一個合適的圖表引擎。ASP.NET有一個內建的圖形工具庫,即System.Drawing名稱空間的GDI+,可以用來建立簡單的餅圖、直條圖、折線圖等,不過它屬於低級的API,算不上繪製圖表的引擎,特別是不適合繪製複雜的圖表。

ASP.NET環境下還有許多商業化的圖表繪製程式碼程式庫,隨便搜尋一下Google,就可以找到:

Mycos Charts .NET Web Forms Edition

Dundas Chart for ASP.NET

.netCHARTING

Charting Controls at the ASP.NET Control Gallery

不過,許多產品都相當昂貴,而且與世界上應用最廣泛的圖表繪製工具——Excel相比,不免給人以陌生的感覺。MS Excel是一個相當強大的圖表引擎,支援的圖表類型非常豐富,而且提供了完備的圖表布局調整功能。

正因為如此,所以本文要討論的主角是OWC,即Office Web Components,或者“Office Web組件”。按照微軟的定義,OWC是一種“將類似Office的功能擴充到Web的微軟技術”。它可以在用戶端使用,例如我們將Excel工作表儲存為Web頁面時就要用到,利用它可以方便地將互動式試算表和圖表發布到Web頁面。同時,OWC也是一個優秀的伺服器端圖表引擎,具有與MS Excel同樣強大的圖表繪製能力。

三、OWC的許可證問題

如果你曾經用過版本較早的OWC,可能已經遇到過微軟的許可證問題。以前這個問題相當令人煩惱,微軟不僅要求伺服器上必須有Office許可證,而且每一台客戶PC上也同樣要有。

實際上,這相當於將OWC的用途局限到了Intranet之內,只有Intranet之內才可以保證客戶PC上都安裝了Office許可證。不過現在微軟的態度有所放緩——伺服器上仍舊要安裝Office許可證,但只要圖表是“非互動式”用途,例如本文的伺服器端圖表繪製,用戶端就不必再裝Office許可證。實際上,就連伺服器端也不必安裝完整的Office許可證,Excel 2002或FrontPage 2002的許可證就已足夠,從而使OWC變成了價廉物美的伺服器端圖表引擎。

那麼,在伺服器上安裝MS Office?不,沒有必要。雖然從許可證條件看,OWC應該是Office的一部分,但從技術上說,OWC是一個獨立的產品。Web伺服器上只需安裝OWC軟體包,不必安裝整個Office。

OWC首次出現於Office 2000,即OWC 9.0。在Office XP中,OWC的編程模式已作了修改,這使得OWC XP(也就是OWC 10)不能與OWC 9.0完全相容。OWC 10要求在ASP.NET環境中運行,所以OWC 10軟體包必須安裝到ASP.NET伺服器上。

接下來,很自然的一個問題是:哪裡可以下載OWC 10軟體包?令人驚奇的是,它可以從微軟的網站免費下載,地址是http://office.microsoft.com/downloads/2002/owc10.aspx,
(中文地址:http://www.microsoft.com/downloads/details.aspx?displaylang=zh-cn&FamilyID=982B0359-0A86-4FB2-A7EE-5F3A499515DD 網際浪子注)但要注意的是,Web伺服器上必須安裝了某種Office 2002的許可證才能合法地使用OWC 10。

四、OWC的運行機制

OWC是一組COM(ActiveX)控制項的集合,涵蓋試算表、圖表、樞紐分析表等功能。它經常被當作用戶端技術使用,這時COM控制項就安裝在用戶端PC上。如果在伺服器端使用,人們主要感興趣的是它的圖表製作功能。

有了OWC,我們可以在ASP.NET Web伺服器上動態建立一個圖表,然後將圖表以GIF圖形的形式發送到用戶端。用戶端看到的僅僅是一個普通的圖形檔案,但在“背後”,圖形檔案實際上是由伺服器上ASP.NET回應客戶請求時動態產生的。因此,這種技術對用戶端沒有特殊的要求,只要能夠顯示GIF圖形就可以了,即使Netscape和Opera也不存在任何問題。

既然如此,為什麼在ASP.NET開發領域中,OWC這一優秀的微軟技術尚未被廣泛採用呢?微軟根本不為OWC作觸達,再加上令人迷惑的許可證問題,當然令許多開發人員望而卻步。也許微軟認為該產品還沒有完全成熟,即將到來的Office 2003將會帶來OWC 11,它的編程模式還會有所改變。另外,還有一種可能是微軟擔心OWC技術的廣泛採用會影響Office的銷售。

再者,關於OWC的編程執行個體很少。微軟知識庫有幾個用戶端的例子和“傳統”ASP的伺服器端例子,但找不到在ASP.NET環境中使用OWC 10的例子。OWC的新聞群組,microsoft.public.office.developer.web.components,主要討論的也是用戶端的應用。如果你要在ASP.NET環境中使用OWC 10,主要還是靠自己摸索。正是因為這些原因,所以本文從相當廣泛的角度探討了該技術的實際應用。

五、在Web伺服器上安裝OWC 10

要想在ASP.NET Web伺服器上用OWC繪製圖表,首先應當安裝必要的軟體和修改一些配置。

第一,Web伺服器上當然應該有ASP.NET運行環境。除了.NET Framework Redistributable,還要有GACUTIL程式(屬於.NET架構SDK)來配置OWC控制項,也就是說,還要安裝.NET Framework SDK工具。如果把.NET Framework 1.1 Redistributable和SDK安裝到了預設目錄,PATH環境變數的內容應當包含:C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322;C:\Program Files\Microsoft.NET\SDK\v1.1\Bin。

接下來再在Web伺服器上安裝OWC 10。OWC可以從微軟免費下載,安裝時只要採用所有預設選項即可。

由於OWC 10是一種COM技術,為了讓.NET代碼使用OWC 10組件,還必須安裝Office XP的Primary Interop Assembly(PIA),PIA可以從微軟網站下載(http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnoxpta/html/odc_oxppias.asp)。
(網際浪子發現的地址是:http://www.microsoft.com/downloads/details.aspx?FamilyId=C41BD61E-3060-4F71-A6B4-01FEBA508E52&displaylang=en)
下載得到的OXPPIA.exe是一個壓縮檔,現在把它解壓縮到伺服器上的一個目錄,假設是C:\oxppia,然後啟動一個命令視窗(注意,確保PATH環境變數已正確設定[網際浪子註:可以用我作的SETPATH.BAT運行一下]),轉到c:\oxppia目錄,運行REGISTER.bat。

這個命令把Office XP PIA匯入到全域程式集緩衝區,修改註冊表設定。注意觀察REGISTER.bat命令的輸出,確信GACUTIL命令確實在運行。如果PATH環境變數設定有誤,PIA不可能正確匯入。README文檔說應當用VS.NET命令列環境,但Web伺服器上可能沒有安裝VS.NET,這時就要手工修改PATH環境變數了(效果一樣)。

最後,還要把下面這行代碼加入Web伺服器的machine.config檔案的<assemblies>節,對於.NET Framework 1.1,machine.config檔案可以在C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\CONFIG目錄下找到:


<add assembly="Microsoft.Office.Interop.OWC, Version=10.0.4504.0,
     Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>


浪子註明:如果發生不能編譯的錯誤,可能要再次運行註冊步驟!我這裡這樣,大家如果不一樣,可以自己試試。

六、OWC編程模式

為了在ASP.NET頁面中顯示一個OWC圖表,我們將建立一個簡單的ASP.NET頁面,該頁面的唯一用途就是顯示圖表。Web頁面的名稱是getchart.aspx。要在Web頁面中顯示出圖表,可以用一個標準的HTML <IMG>標記,如下所示:



<img src="getchart.aspx" />





getchart.aspx頁面在伺服器上動態產生OWC圖表,然後把圖錶轉換成GIF圖形發送給用戶端。因此,在用戶端看來,getchart.aspx就相當於一個GIF圖形。

下面我們分析一下getchart.aspx檔案。如果使用ASP.NET的Codebehind機制,getchart.aspx實際上只要數條ASP.NET指令:



<%@ Page Language="vb" AutoEventWireup="false"
Codebehind="getchart.aspx.vb" Inherits="getchart"%>
<%@ OutputCache Duration="5" VaryByParam="none" %>




要組建圖表的資料稱為資料原,Chart Component組件支援的資料來源有:實現IDataSource介面的任何資料來源;ADO Recordset對象;XML檔案;數組或者一定格式的文本字串。在ASP中,我們可以用ADO Recordset對象;在.NET的ADO.NET中,由於ADO.NET沒有實現IDataSource,.NET也沒有提供ADO.NET DataSet對象向ADO Recordset對象的直接轉換,如果你有一個 DataSet對象,你要麼轉換成XML檔案,要麼產生特殊格式的字串才可以使用。下面就是本例子的結果:



[浪子註明:如果出錯,可能是檔案夾許可權的問題,我的就是,要將虛擬目錄的everyone的全部許可權加上!]



下面是實現這種功能的VB.NET版本的ASP.NET例子與代碼:

OWC.aspx:

<%@ Page Language="vb" AutoEventWireup="false" Codebehind="OWC.aspx.vb" Inherits="aspxWeb.OWC"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<HTML>
  <HEAD>
    <title>WebForm1</title>
    <meta name="GENERATOR" Content="Microsoft Visual Studio 7.0">
    <meta name="CODE_LANGUAGE" Content="C#">
    <meta name="vs_defaultClientScript" content="JavaScript">
    <meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">
  </head>
  <body MS_POSITIONING="GridLayout">
    <form id="Form1" method="post" runat="server">
      <asp:placeholder id="ChartHolder" runat="server"></asp:placeholder>
    </form>
  </body>
</HTML>


聯繫我們

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

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

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.