Programming MS Office 2000 Web Components第三章第二節

來源:互聯網
上載者:User

第三章第二節    圖表組件進階功能

       我們已經瞭解了關於圖表產生的所有基礎知識,現在讓我們來研究圖表組件一些更進階的功能,尤其是那些在傳統的Excel圖表產生中沒有的功能。許多這些功能都會在本書第二部分所介紹的解決方案中被使用。當我們討論這些解決方案時,如果您記不清某個特定功能的基礎知識,可以回頭參考本節,以獲得更一般意義上的解釋。

“圖資料表空間”中的多重圖表

         前面提到過,圖表控制項可以在名為圖資料表空間的地方一次顯示多個圖表。其實圖表控制項的頂級編程介面就叫做ChartSpace,當您在容器中插入一個新的圖表控制項時,控制項的預設名稱通常叫做ChartSpace1。

當您需要顯示多個相關聯的圖,並且要能夠方便的對各圖進行比較時,在一個控制項中同時顯示多重圖表的功能就會很有用。人們常稱這種設計為“小型多重設計”,它可以成為一個強大的分析工具。例如,如果您需要同時顯示各時間段的銷售資料,銷售人員,以及地理位置,您就可以為每個國家建立一個圖表,在每個圖表中將銷售人員顯示為系列,時間顯示為類別。圖3-18顯示了最後的圖表可能的樣子。

圖表控制項可以在同一個圖資料表空間中顯示最多16個圖表,但是所有的圖表必須共用同一組類別。如果兩個圖表各自包含不同的一組類別,用於所有圖表的那組類別將會是每個圖表的類別的合集。這是因為小型多重設計依賴各圖表中的類別、系列和軸上的刻度的一致性,使得您能夠容易的發現各圖表之間明顯的區別和趨勢。

 

圖3-18。一個圖資料表空間中的多重圖表。

圖表控制項不會自動為您在各個圖表中設定值軸的刻度,但是您可以使用來自隨書光碟片中Chap03檔案夾下的MultipleCharts.htm檔案中的一小段代碼十分輕鬆的完成這個功能。

'------------------------------------------------------------------------

' NormalizeCharts()

'

' 目的: 將圖資料表空間中所有各圖表的值軸設定成相同,以便您能準確的比較各值。

' 傳入參數:cspace = 指向ChartSpace對象的引用

'          nAxis = 值軸在WCAxes集合中的索引

'

Sub NormalizeCharts(cspace, nAxis)

    ' 局部變數

    Dim cht     ' 指向chart對象的臨時引用

    Dim ax      ' 指向axis對象的臨時引用

    Dim nMax    ' 各軸上的最大值

   

    nMax = 0

   

    ' 遍曆所有的圖表一次,獲得所有圖表中值軸的最大值

    For Each cht In cspace.Charts

        Set ax = cht.Axes(nAxis)

        If ax.Scaling.Maximum > nMax Then

            nMax = ax.Scaling.Maximum

        End If

    Next 'cht

   

    ' 再次遍曆各圖表,設定最大值

    For Each cht In cspace.Charts

        Set ax = cht.Axes(nAxis)

        ax.Scaling.Maximum = nMax

    Next 'cht

 

End Sub 'NormalizeCharts()

 

         這段代碼對圖資料表空間中的所有Chart對象執行兩次遍曆。第一次遍曆確定所有值軸上的最大值,第二次將各圖表值軸上的Scaling.Maximum屬性設定為獲得的最大值,這樣所有圖表在它們的值軸上都具有相同的最大值。請注意只有在您的圖表具有值軸時這種方法才是必要的――因此它並不適用於多重餅圖,多重堆積餅圖,或多重環圈圖。

         您也可以通過調整頂層ChartSpace對象的ChartLayout和ChartWrapCount屬性來控制控制項空間中多重圖表的布局。可以通過設定ChartLayout屬性來水平平鋪或垂直平鋪各圖表。ChartWrapCount屬性控制每行(或每列)在一行(或一列)中顯示多少圖表。也可以通過調整每個WCChart對象的HeightRatio和WidthRatio屬性擴大或縮小特定圖表的尺寸。

 

服務端的應用

         除了能夠以COM控制項的形式寄宿在表單上之外,每個Office Web組件都能以不可見,位於記憶體中的方式被使用。但是當運行在一個web server的環境下時,圖表組件可能是Office Web組件中最讓人關注的部分。當OWC小組在微軟內部首次開始發行beta版本時,我們立刻就收到來自公司的許多其它小組的email,他們希望知道如何在伺服器上使用Chart控制項來產生動態資料的圖表(大部分情況下,是為了提供bug的統計報告)。許多商務工作中都包括用於評測產品或運作過程的一群組計量;商業主管們一直夢想著只要開啟他(或她)的web瀏覽器就可以看到反映即時更新的資料的圖表。因為圖表控制項可以在伺服器端使用,並能夠產生圖表自身的GIF格式的圖形拷貝,所以許多開發人員發現在服務端利用圖表控制項來產生既能被用於互連網環境,也能被用於包含各種不同類型用戶端電腦的企業環境中的即時資料的圖表,是一個非常棒的方法。

         當在服務端使用圖表控制項時,您可以使用它的所有標準功能。還有,之前我們所討論的那些用於將不同類型的資料裝載到圖表中的代碼在服務端環境中也是可用的。通常,會使用一個服務端對象或伺服器上另一段指令碼產生的ADO Recordset對象來裝載圖表控制項。您可以引用圖表中的所有元素,就好像它們顯示在螢幕上一樣,在您完成建立圖表後,可以使用ChartSpace對象的ExportPicture方法來將GIF圖形寫入一個檔案中。在目前的版本中,Chart控制項只支援輸出為GIF圖形格式,不過您可以指定輸出圖形的任意寬度和高度(以象素為單位)。

         關於服務端應用,我需要說明的最後一點是:您應該檢查您的Office2000附帶的許可證協議,並詢問微軟應用開發人員客戶協會(ADCU)的代表關於在web伺服器上使用Office Web組件來開發解決方案的更多資訊。在本書寫作期間,Office市場小組正在將一個特殊的Office Web元件服務端使用許可和Office使用協議合并在一起。雖然很多細節還沒有最後確定,但是這個許可預計將不會限制用戶端數目,這樣您就可以在一個Internet網站上使用這些組件了。

 

分割軸

         另一個普遍需要的圖表產生功能是在某一點分割值軸的能力,這使得您可以在同一個值軸上繪製很小的數值和很大的數值,並仍然能夠顯示局部的變化,圖3-19描述了一個常見的分割軸圖表。

 

圖3-19。一個分割軸圖表。

         圖表在每個值軸上可以有一個分割點,您可以指定值軸上分割開始和結束的確切值。可以在設計階段在屬性工具箱中完成這個操作:先選擇值軸,然後使用屬性工具箱中的Split Axis段來設定開始和結束的分割值。您也可以在運行時通過代碼來完成:先將軸的Scaling對象的HasSplit屬性設定為True,然後再設定SplitMinimum和SplitMaximum屬性。

 

調整軸的刻度

         預設情況下,圖表控制項會為值軸自動選擇一個最小值和最大值,使得所有的資料點均可見,並且在繪圖區周圍留下一些空白。但如果您需要覆蓋這些預設設定,可以手工調整一個軸的scaling屬性來精確的設定您所需要的最小值和最大值。

         每個WCAxis對象都有一個Scaling屬性,它返回一個WCScaling對象。WCScaling對象具有名為Minimum和Maximum的屬性,能夠通過這些屬性來精確的設定最小值或最大值,或者從這些屬性中讀取當前值。您還可以通過將HasAutoMinimum和HasAutoMaximum屬性設定為True,來強迫軸變回成自動化佈建刻度的狀態。

         您還可以利用WCScaling對象來告訴軸使用對數刻度代替線性刻度。將WCScaling的Type屬性設定為chScaleTypeLogarithmic常量,可以將刻度變為對數刻度,將Type屬性重新設定回chScaleTypeLinear常量,可將刻度又變成線性刻度。您也可以通過調整LogBase屬性來設定對數刻度的基數。

         另一個您可以調節的有趣設定是Orientation屬性,它可以使刻度以從最小值到最大值的相反順序顯示。對於一個值軸它可能有用,也可能沒有用,但是這是將類別軸上的各類別以相反的順序顯示的最簡單的方法。

         Scaling對象的使用中最有趣的部分可能是在一個軸上類比縮放和位移。如果您的圖表中資料點的密度很高,那麼它可以用來允許分析者放大軸上的某一特定段,然後在軸上移動來觀察各段。您可以通過簡單的操作Scaling對象的Minimum和Maximum屬性來達到這個目的,這會造成圖表縮放和位移的效果,因為操作這兩個屬性會使圖表在螢幕上相同的可視距離中顯示較少的數值距離。

 

自製圖表標籤

         圖表組件並不具有您在Excel中肯定看到過的圖表標籤功能。圖表標籤是一個較大的螢幕標籤,當您將滑鼠停留在一個資料點或圖表項目上時,它會顯示出來。圖表標籤顯示資料點的值,類別,系列,以及其它一些有用的資訊。壞訊息是這些圖表標籤並不是圖表控制項本身的屬性;好訊息是您可以通過捕捉圖表控制項觸發的一些事件來自己添加這些標籤。在本書第二部分,我會解釋您如何才能建立這些自製的圖表標籤。現在,我僅僅講述它們的工作原理。

         圖表控制項在滑鼠在控制項上方移動時會觸發MouseMove事件。在這個事件中,您可以查詢滑鼠當前相對於控制項左上方點的X和Y座標。這個X和Y座標不僅能夠協助您在滑鼠所在的位置防止其它元素,您還能將他們傳遞給ChartSpace對象的RangeFromPoint方法,來獲得當前位於滑鼠下方的chart對象。例如,如果您的滑鼠位於一個資料點的上方,這個方法會返回一個WCPoint對象,利用這個對象,您可以判斷這個資料點的父系列,類別,以及使用GetValue方法來獲得這個資料點的具體值。您也可以使用這個WCPoint對象來調整這個資料點的格式,這就意味著您能夠:例如,改變邊框的顏色來高亮顯示這個數值,或者將內部顏色改變成一個較暗的顏色或當前填充顏色的一個較淺的陰影。如果滑鼠位於一個圖表項目之上,例例,您就可以從這個方法的返回中獲得一個WCLegend對象。使用VBScript和VBA中的TypeName方法來判斷您從RangeFromPoint方法的返回中獲得的是什麼類型的對象。您也可以使用ChartSpace對象的SelectionType屬性來判斷從Selection屬性返回的對象的類型。

         請參考隨書光碟片Chap03檔案夾下的ReactingToMouse.htm檔案,檔案中有使用圖表組件事件和響應滑鼠的例子。

                   為什麼叫做RangeFromPoint?

當我首次開始注意圖表組件編程模型中隱藏的細節時,我問圖表組件的專案經理:Jason Cahill,為什麼這個方法的名字叫做RangeFromPoint,很明顯它和range無關,並且返回的是chart對象。我問道:“為什麼不叫做ObjectFromPoint呢?”。

Jason解釋說,當微軟的協助工具功能組初次決定為盲人建立螢幕助讀程式時,他們需要Excel中的一個方法能夠返回滑鼠下方的目前範圍,以便他們能夠使用電腦的聲音系統來閱讀儲存格中的值。(如果您對此很迷惑,這裡有相應的解釋資訊:協助工具功能組的目的是使電腦能夠協助那些殘疾人士,螢幕助讀程式使用音響來為盲人大聲閱讀螢幕上的文字。)Excel將這個方法正確的命名為RangeFromPoint,因為它根據一個(X,Y)點返回一個地區。但是,協助工具功能組將這個方法的名字寫進了他們的應用程式的代碼中,結果現在任何希望為螢幕助讀程式提供協助工具功能的人都必須實現RangeFromPoint方法,即使他或她的應用程式與試算表的地區沒有任何關係。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.