- 相關推薦
Excel Web組件的應用(一)
一、選題目的和意義
微軟的Excel是目前最經常用到的辦公軟件之一,其功能是十分強大的。現在幾乎所有的電腦上都會安裝該軟件。然而當今是一個信息共享的網絡時代,單機版的Excel在實現信息共享方面就會顯的麻煩,不好維護。因此微軟推出了Office Web Components(簡稱OWC)這一組件。它能夠將Excel的功能在互聯網上采用瀏覽器的方式使用。即用Office Web Components設計系統,省掉了對客戶端的安裝和維護工作。
通過對Office Web Components的學習和設計,對其原理有一個深入的了解。并且希望通過這次的實踐運用所學知識,來培養我的動手能力,故選擇Excel Web 組件作為我的畢業課題。
二、本選題在國內外的研究現狀和發展趨勢
本課題在國內外的研究還是比較廣泛的,也涌現出了大量的應用軟件,但是很難有比較通用的。這主要是因為每個企業、單位現狀都是不同的。Excel 2000提供各種不同全新功能,主要是設計來幫助使用者進行協同作業與信息分享,并通過Web來執行更加深入細致的數據分析。為迎合這一要求,Office 推出了Office Web Components(OWC)這一組件。Excel與Web整合所產生的最重要的效益之一,便是所有的使用者只需要使用游覽器便可以游覽豐富的Excel文件內容。因此OWC當前不僅大量應用于Internet,在Intranet中也得到了廣泛的使用。因此本課題在國際上得到大力發展的趨勢是必然的。
三、課題設計方案 [主要說明:研究(設計)的基本內容、觀點及擬采取的研究途徑。]
研究設計的基本內容是:
Office Web Components的三個組件的研究和掌握:
Spreadsheet 組件: Spreadsheet 組件能夠在 Internet Explorer 中提供類似 Excel 的功能。Spreadsheet 組件使您可以獲得一個完整的電子表格、某一單元格區域或某一命名區域(如打印區域、自動篩選區域或用戶定義名稱區域)并將其發布到 Web 頁。
PivotTable 組件: PivotTable 組件允許用戶通過向 Web 頁添加排序、分組、篩選、分級和其他數據處理功能來分析數據。本組件將 Excel 的列表功能(排序、自動篩選和分級)和數據透視表報表的自動匯總功能結合運行于 Internet Explorer 中的單一 ActiveX 組件中。
Chart 組件: Chart 是 Microsoft Office 使用的數據綁定 ActiveX 組件,用于向 Web 頁添加圖表功能當該組件從 Excel 中發布以后,根據圖表數據在電子表格中的位置不同(在某區域中或在數據透視表報表中),得到的 Web 頁將不僅包含 Chart 組件,還包含 Spreadsheet 組件或 PivotTable 組件。
四、計劃進度安排 [主要說明:起止時間及分階段的進度要求。]
畢業論文(設計)的進度計劃:
第一階段: 起止時間:2005.11.1-2005.11.22
進度要求:盡快了解論文大體構架,搜集相關資料, 撰寫開題報告書。
第二階段: 起止時間:2005.11.23-2005.12.24
進度要求:確定論文具體要論述的內容,撰寫論文。
第三階段: 起止時間:2005.12.25-2006.1.15
進度要求: 論文基本完成,提交指導老師修改,準備答辯。
五、主要參考文獻
[1] David stearns.Programming Microsoft Office 2000 Web Components.Microsoft Corporation.
2004,5.
[2] 北京宏遠電腦培訓中心.Office 2000綜合應用短期培訓教程.北京工業大學出版社.
[3] China Microsoft.Microsoft Office 2000 Web 組件基礎.
library/archives/library/techart/msowcBasics.asp.
[4] 李祥平、劉書秀等.圖解精通 Office 2003.中國水利水電出版社. 2004,1.
指導教師意見及建議
摘要:本文介紹了什么是Microsoft Office Web Components(簡稱OWC),以及可以在什么地方使用它們。Microsoft Office Web Components主要包括三種組件: Spreadsheet 組件、Chart 組件和 PivotTable 組件。它們是用于向 Web 頁添加電子表格、圖表和數據處理功能的 ActiveX 組件的集合。由于 Office Web 組件是完全可編程的,因此在很多設計環境中都可以使用這些組件來建立復雜的、交互的和基于 Web 的解決方案。這些設計環境包括 Microsoft FrontPage、Microsoft Access 數據訪問頁以及 Microsoft Visual Basic。當然也可以直接在 Microsoft Excel 中發布這些 Office Web 組件。以下我將主要介紹從 Excel 中發布 Microsoft Office Web 組件的方法。然后我們將重點針對Spreadsheet 組件(電子表格組件)進行深入研究。在Microsoft FrontPage中通過VBScript采用面向對象的方法展示使用電子表格組件編程模式的關鍵所在,實現Web頁與Excel的交互功能。
關鍵詞:OWC,ActiveX, Spreadsheet Component, Chart Component, PivotTable Component, VBScript, Excel.
1 Office Web Components 介紹
Microsoft的Office Web 組件首次包含在 Microsoft Office 2000 中。它們是用于向 Web 頁添加電子表格、圖表和數據處理功能的 ActiveX 組件的集合。在使用 Microsoft Internet Explorer 瀏覽包含 Office Web 組件的 Web 頁時,您可以直接在 Internet Explorer 中處理顯示的數據,如對數據進行排序和篩選,輸入新的數值,展開和折疊明細數據,進行行列旋轉以查看源數據的不同匯總信息等。Office Web 組件能夠提供所有這些功能。
該組組件可以在Web頁中實現Excel的許多常見功能,并可以通過編寫腳本代碼來添加一些組件中所缺少的功能。OWC是一組COM組件(COM也被稱作ActiveX)。利用這些組件,可以在Web游覽器以及其他傳統的編程環境下創建許多有用的數據處理與報表生成的解決方案。
OWC的最大特點是它可以在Web頁面、FrontPage、Visual Basic等組件容器中使用,也可在內存中做為不可見的使用 。OWC中的所有組件都支持豐富的編程接口集合,使得開發者可以通過Microsoft VBScript、Microsoft Jscript、Microsoft VBA、Java、C++等多種語言來調用這些組件。
OWC共有四種 Office Web 組件:Spreadsheet 組件(電子表格組件)、Chart 組件(圖表組件)、 PivotTable 組件(透視表組件)和Data Source組件(數據源組件)。其中Data Source 組件,用于將其他組件綁定到一個數據源;這個組件在 Access 的數據訪問頁中廣泛使用,本文不做重點討論。在下面的章節,我們將首先介紹前三種組件的主要功能。
2 組件介紹
2.1 電子表格組件
Spreadsheet 組件像一個Excel電子表格的精簡版,能夠在 Internet Explorer 中提供類似 Excel 的功能。使用這個組件,可以對數值進行過濾、排序和滾動數據,也可以改變和重新計算數據;還可以保護單元不被修改;甚至可以將數據重新裝載到Excel2000中。該組件如圖 1 所示。
圖 1:顯示在 Internet Explorer 中的 Spreadsheet 組件
當數據從 Excel 中發布時,Spreadsheet 組件將自動使用這些數據對電子表格進行填充。另外也可以通過編程來填充 Spreadsheet 組件。
Spreadsheet 組件在 IE 中可提供如下功能:<1>支持 Excel 2000 中的大部分功能;2>重新計算引擎;<3>基本的電子表格格式;<4> 簡單的電子表格用戶界面;<5>自動篩選;<6>數據排序;<7>多重撤消。
2.2 數據透視表組件
PivotTable 組件是為了提供交互的數據報表和分析功能而設計的。允許用戶在 Web 頁中使用排序、篩選、分級等功能來分析數據。本組件將 Excel 的數據透視表報表的自動匯總功能和列表功能(排序、自動篩選和分級)相結合,運行于 Internet Explorer 中。
數據透視表列表中的源數據可以來自 Excel 電子表格、任何列表形式的 OLE DB 或 ODBC 數據源,或者用于 OLAP 服務的 Microsoft OLE DB 提供程序所支持的任何 OLAP 數據源。
要理解數據透視表報表和列表的工作方式,應熟悉如下區域,如圖 2 所示:
圖 2:未填充的 PivotTable List 組件,顯示篩選區域、列區域、行區域和匯總/明細區域
拖放區域 用于數據透視表列表中,能夠將字段拖放到該區域。
篩選區域 數據透視表列表的頂端拖放區域。用于整個數據透視表列表的篩選。在篩選區提供了所有條目的下拉選擇列表。選中特定的條目將只允許該條目顯示在數據區域/明細數據區域。
行區域 左邊的拖放區域。用于行的分組。
列區域 篩選區域下面的區域。用于列的分組。
數據區域 數據透視表列表的主要部分。用于所有的總計(求和、計數、最小值、最大值)和
列表。
明細數據區域 也是數據透視表列表的主要部分。用于支持明細數據的字段(即沒有應用總計功能)。您可以通過單擊 PivotTable 組件工具欄上的“展開/折疊”按鈕來顯示此區域。
PivotTable 組件提供如下功能:<1>交叉列表(能夠旋轉行列以查看源數據的不同匯總信息);<2>瀏覽報表數據;<3>動態篩選(自動篩選、按選定內容篩選、篩選字段)和排序;<4>按行或按分組;<5>創建總計。
2.3 圖表組件
Chart用于向 Web 頁添加圖表功能。該組件從 Excel 中發布以后,根據圖表數據在電子表格中的位置不同(在某區域中或在數據透視表報表中),得到的 Web 頁將不僅包含 Chart 組件,還包含 Spreadsheet 組件或 PivotTable 組件。在 Internet Explorer 中查看 Chart 組件時,對 Spreadsheet 或 PivotTable 組件中數據的更改將自動顯示在 Chart 組件中。如圖 3 所示:
圖 3:從 Excel 中發布的 Chart 組件
如果從 Microsoft Excel 中發布 Chart 組件,它將自動綁定到包含其數據的 Spreadsheet 或 PivotTable 組件。但是也可以通過編程將 Chart 組件綁定到一個數據源,或者可以提供數據以便使用代碼制圖。
3 創建 Office Web 組件
3.1 從 Microsoft Excel 中發布組件
在 Microsoft Excel 中創建 Office Web 組件有兩種方式:
<1>在“文件”菜單上單擊“另存為 Web 頁”命令,在“另存為”對話框中單擊“發布”按鈕,在“發布為 Web 頁”對話框中選擇“添加交互對象”復選框并選擇所需功能,然后單擊“發布”按鈕。
<2>在“文件”菜單上單擊“另存為 Web 頁”命令,在“另存為”對話框中選擇“添加交互”復選框,然后單擊“保存”按鈕。
以上兩種方法都可以將 Excel 數據發布為 Web 頁,這樣用戶便可以在IE 中直接修訂或更改數據。
在 Excel 中選定的條目將決定在發布數據時使用的組件,如表1所示。
表1 Excel 中發布的條目與相應的組建對照表
當試圖將某些電子表格導入HTML中時,可能會遇到錯誤信息。如果源電子表格是受口令保護的(通過使用工具|保護|保護工作表命令),Excel就不會允許將電子表格或任何區域發布到Web頁面中。因為Web頁面是純文本的文件,任何人都可以在任何文本編輯器中打開,瀏覽和修改它,所以如果允許這樣作的話,就會破壞安全性。當電子表格的作者需要防止用戶修改某部分時,電子表格就會常常被密碼保護。例如,Excel中的公司開支報告就常常被密碼保護,以防止員工不能修改有效性驗證規則的公式。
請注意,還可以通過使用“保護”功能來鎖定大多數的單元,以使用戶只能修改那些指定可以更新的單元。只要不使用口令來保護電子表格,就可以將電子表格發布或者拷貝到電子表格組件中,而且所有的保護設置都會被保留。
3.2 在 Microsoft Internet Explorer 中使用組件
在Internet Explorer顯示時只有 Spreadsheet 和 PivotTable 組件為用戶提供了與組件交互的方法。二者均使用了工具欄來實現用戶的交互和操作。以下將簡要討論組件運行時的用戶界面。
3.2.1 Spreadsheet 組件的用戶界面
Spreadsheet 組件工具欄(如圖 4 所示)?梢哉f是 Excel 標準工具欄的精減版本。
圖 4:Spreadsheet 組件工具欄
Spreadsheet 組件工具欄中的很多按鈕與 Excel 中對應按鈕具有相同的基本功能。除了幫助外,在 Excel 中右鍵單擊表格所打開的快捷菜單上的命令同樣適用于電子表格的網格。
表2 Spreadsheet 組件功能
按鈕 在 Spreadsheet 組件中的行為
撤消 可以撤消下列操作:排序、應用篩選、刪除篩選、應用數字格式、更改單元格的值、粘貼、更改字體格式(字形、字號、粗體、斜體、顏色)、更改單元格格式(填充、對齊)、清空單元格以及插入列或行。
剪切、復制、粘貼 支持向剪貼板剪切、復制或粘貼 HTML 或文本,但不支持剪切、復制或粘貼 BIFF、RTF 或其他格式。
始終復制到操作系統剪貼板。
與 Excel 不同的是,在剪切、復制、粘貼操作中可以進行干預,這意味著在復制一個單元格后不必立即粘貼。
自動求和 與 Excel 中的功能
升序排序、降序排序 與 Excel 中的功能相同?旖莶藛蚊顚盈B到“排序”菜單上,列出了要排序的字段標題。在 Excel 中沒有“排序”對話框。
自動篩選 在下拉列表中包含多個復選框來實現多選。
沒有“前 10 個”或“自定義”選項。
不能使用高級篩選功能。
導出到 Excel 打開 Microsoft Excel,并將所有數據從 Spreadsheet 組件復制到一個新的、只讀的工作表中,該工作表名稱為 OWCSheet#####.htm 格式(##### 為一隨機數)。最多可有 65,536 行,這與 Excel 是一樣的,但是從 A 到 ZZ 共計 676 列,而 Excel 只有 256 列可用。如果使用的列超出 256 列,那么當數據導出到 Excel 時,超出的列中的數據將丟失。
屬性工具箱 顯示 Spreadsheet 組件的屬性工具箱。
幫助 顯示 Microsoft 電子表格幫助。
3.2.2 PivotTable 組件的用戶界面
PivotTable 組件工具欄(如圖5 所示)具有與 Excel 中的數據透視表工具欄相同的基本功能,但它還有其他一些組件。
圖 5:PivotTable 組件工具欄
下表簡述了 PivotTable 組件工具欄上組件的功能。
表3 PivotTable 組件功能
組件 組件類型 操作
關于 按鈕 顯示“關于 Microsoft Office Web 組件”對話框。
復制 按鈕 將選定數據復制到剪貼板。
升序排序、降序排序 切換 打開時,按升序或降序對列或行字段進行排序。關閉時,數據恢復到保存時的方式。與 Excel 中的數據透視表報表不同的是,空格被排在頂端。
自動篩選 切換 打開時,根據行字段或列字段下拉列表中復選框的狀態(選中或未選中)來顯示或隱藏條目。關閉時,所有條目都將顯示。
自動計算 菜單 允許選擇使用求和、計數、最小值、最大值功能來匯總字段?梢员粩祿敢暠砹斜淼膭摻ㄕ呓。
分類匯總 切換 顯示或隱藏選定字段的分類匯總。
移動到行區域 按鈕 將選定的列字段移動到行區域(選定內容變為行字段)。
移動到列區域 按鈕 將選定的行字段移動到列區域(選定內容變為列字段)。
移動到篩選區域 按鈕 將選定字段移動到篩選字段區域(選定內容變為篩選)。能夠被數據透視表列表的創建者限制。
轉到明細數據 按鈕 將選定字段移動到明細(數據)區域。如果下面兩個選項中有一個為真,則不能移動字段:數據透視表列表的創建者已限制對數據區的訪問;數據透視表列表是基于來自 OLAP 數據庫的源數據。
升級 按鈕 將選定字段向外移動一級(通常從數據區域移動)。
降級 按鈕 將選定字段向內移動一級(通常從數據區域移動)。
展開/折疊 切換 展開或折疊選定字段、數據條目或數據區域中單元格的數據明細。與在 Excel 中不同的是,這里只有一個按鈕在“展開”和“折疊”之間切換。而在 Excel 中,它們是兩個按鈕。
刷新 按鈕 從源列表或數據庫更新數據。
導出到 Excel 按鈕 啟動或切換到 Excel,同時將數據以數據透視表報表格式復制到新的工作簿中。只有在需要進一步分析數據時才使用此功能。請使用“復制”向 Excel 電子表格傳遞數據。
屬性工具箱 按鈕 顯示 PivotTable 組件的屬性工具箱。
字段列表 按鈕 顯示數據透視表列表的源數據中可用字段的層次列表。
幫助 按鈕 顯示 Microsoft 數據透視表列表的幫助。
3.3 在 Microsoft FrontPage 中使用組件
3.3.1 創建新網頁
FrontPage 的“插入”菜單上的“組件”處,單擊要插入的組件。該組件將插入到當前插入點。
注意向文檔中插入 Chart組件時,如果該 Web 頁中有可用的數據源,FrontPage 將自動使用 Microsoft Office 圖表向導提示創建該組件。如果沒有可用的數據源,將收到說明信息。通過圖表向導將 Chart 組件添加到 Web 頁后,FrontPage 也向網頁添加了 Data Source 組件,該組件用來將 Chart 組件綁定到所用的數據源。
用于 Spreadsheet 組件時發布的 <object> 標記:
<object id="SpreadSheet1" classid="CLSID:0002E510-0000-0000-C000-000000000046">
用于 Chart 組件時發布的 <object> 標記:
<object id="Chart1" classid="CLSID:0002E500-0000-0000-C000-000000000046" >
用于 PivotTable 組件時發布的 <object> 標記:
<object id="PivotTable1" classid="CLSID:0002E520-0000-0000-C000-000000000046">
用于 Data Source 組件時發布的 <object> 標記:
<object id="msodsc" classid="CLSID:0002E530-0000-0000-C000-000000000046">
FrontPage 中的腳本
在 FrontPage 中向組件添加腳本很容易。組件腳本可以使用 VBScript 或 Microsoft Jscript 來編寫,在此我們只使用了 VBScript 示例。
如果 Web 頁包含一個以上的組件,那么只顯示一個屬性工具欄。屬性工具欄設置的變動將影響所有活動的組件。
電子表格示例
<script language="vbscript">
<!--
Sub Window_Onload()
strPath = "d:\liukai\shili\book1.htm"
Spreadsheet1.HTMLURL = strPath
End Sub
--!>
4 電子表格組件
本章主要研究的是spreadsheet組件的功能和編程。
4.1 電子表格組件基本功能
電子表格組件支持Excel中排序和過濾功能,并且通過編程模型和用戶界面來提供這些功能。
排序
用戶在對電子表格區域排序時可以在電子表格用戶界面中,首先選擇需要排序的區域(或者在區域中選擇任意的一些單元),然后點擊降序工具條按鈕。同時我們也可以通過Range對象的Sort方法,使用排序功能。其功能是在用戶單擊或者雙擊一個列標頭時就可以對列表進行排序。
在此我們需要說明的是電子表格組件一次只能根據一列來對列表進行排序,它不能像excel那樣可以同時根據最多三個關鍵列進行排序(例如,先根據年齡排序,然后根據身高排序,最后根據體重排序)。但是可以通過在其腳本中編程實現多列排序的功能.可以使用下列函數模仿多列的排序。
MultiColumnSort
目的: 同時根據多列對電子表格進行排序
傳入: 電子表格中需要排序的區域的引用,
被排序的列的列編號的數組,
排序方向標志的數組(和上面的數組相同大小)
輸出: 無 (完成排序動作)
Sub MultiColumnSort(Spreadsheet, Range, Columns, Directions)
‘ 啟動一個撤消單位,以便可以以一個完整單位的任務進行撤消
Spreadsheet.BeginUndo()
‘ 關閉ScreenUpdating屬性,使得當我們設置過濾,排序
‘ 和再過濾時電子表格不會重畫
Spreadsheet.ScreenUpdating = False
‘ 現在遞減遍歷Columns數組和Directions數組,
‘ 實現我們需要的效果
For ct = ubound(Columns) To lbound(Columns) Step -1
0 is a guess for column headings
Range.Sort Columns(ct), Directions(ct), 0
Next 'ct
‘ 打開ScreenUpdating屬性開關,使電子表格重畫
Spreadsheet.ScreenUpdating = True
‘ 關閉一個撤消單位
Spreadsheet.EndUndo()
End Sub 'MultiColumnSort()
注釋:BeginUndo和EndUndo方法用來將所有的排序操作組合在一個撤消動作塊中,當用戶選擇撤消命令時,這些排序動作就會被一起撤消。
多列排序實際上是按照被排序列所定義次序的相反次序執行排序動作。例如,需要先根據年齡進行排序,然后再根據身高進行排序,函數則會首先根據身高排序列表,然后再根據年齡進行排序。以上函數接收三個參數:一個需要排序的區域,一個列編號的數組,一個方向值的數組(降序或升序)。本例中函數降序遍歷這兩個數組,從而實現了多列排序的效果。
過濾
在Excel中,過濾時選擇單個項很方便,然而選擇多項需要使用高級自動篩選對話框。而在Spreadsheet組件中,自動過濾下拉列表為每一項都提供了一個簡化復選框,可以快速切換所有項的狀態,較之Excel更為方便。但是電子表格組件中的自動過濾下拉列表沒有包括Excel中很有用的1個設置選項。例如,找不到”前N位”的選項,這個選項使能夠快速過濾,得到前N位的項。不過,我們可以通過調用電子表格組件的編程模型來實現此功能。
TopNFilter
目的: 根據給定的列編號過濾出列表的前N項
輸入: 電子表格和區域的引用、列編號,
要過濾出的行的行數,以及標識過濾出前N行還是后N行的方向值
Out: 無 (完成所需的過濾)
Sub TopNFilter(Spreadsheet, Range, ColumnNum, N, Direction)
Set c = Spreadsheet.Constants
Set rngData = Range
Set af = Spreadsheet.ActiveSheet.AutoFilter
‘ 啟動一個撤消單元,以便將來能以完整的單元進行撤消
Spreadsheet.BeginUndo()
‘ 關閉ScreenUpdating屬性開關,使得當我們在設置過濾,排序和再次應用
‘ 過濾時,電子表格不會重畫
Spreadsheet.ScreenUpdating = False
‘ 清除任何現存的過濾定義
ClearFilters Spreadsheet
‘ 在給定的數據區域中根據傳入的列號的列排序列表
If LCase(Direction) = "bottom" Then
rngData.Sort ColumnNum, c.ssAscending, c.ssNo
Else
rngData.Sort ColumnNum, c.ssDescending, c.ssNo
End If
‘ 如果N+1,N+2等等的行和第N行的值相同,
‘ 則”前N位”過濾的結果可以會包含多過N的行。
‘ 因此循環查看N+1等行是否和第N行的值相同,
‘ 直到查找到一個不相同的值為止。
vNValue = rngData.Cells(N,ColumnNum).Value
While rngData.Cells(N+1,ColumnNum).Value = vNValue
N = N + 1
Wend
‘ N現在的值就是我們需要包括在過濾結果中的行的行數。
Set fltr = af.Filters(ColumnNum)
fltr.Criteria.FilterFunction = c.ssFilterFunctionInclude
For ct = 1 To N
fltr.Criteria.Add(rngData.Cells(ct,ColumnNum).Text)
Next
‘ 最后引用自動過濾
af.Apply
‘ 打開ScreenUpdating屬性開關,使電子表格重畫
Spreadsheet.ScreenUpdating = True
‘ 結束撤消單元
Spreadsheet.EndUndo()
End Sub 'TopNFilter()
“前N位”過濾功能似乎很簡單,只要先排序,然后查看最開始的N行即可。但是真正的”前N位”過濾功能可能會返回超過N行的結果,因為它實際上的意思是”包括前N位的值的那些行”。如果在排序后,第10,11位的值相同,那么”前10位”過濾會將這些產品一起返回,因為它們都在前10位的值當中。還有,上述代碼通過簡單的改變排序方向(升序和降序)實現了過濾出前N位和后N位的功能。
裝 載 數 據
Spreadsheet組件可以通過多種方式加載和保存數據,可以按實際情況靈活的運用這些方式。
可以通過4種方式將數據裝載到電子表格組件中:
1 通過交互從Excel2000中發布一個電子表格或區域。
2 從Excel2000向電子表格組件中拷貝一個區域。
3 當電子表格組件位于設計器中時,可以直接在組件中輸入數據或一組新的公式。
4指定一個URL來裝載數據,這個URL會返回一個HTML文檔,其中至少包含一個HTML表格。此外,也可以從一個URL處裝載以逗號分隔的文本數據(CSV)。
前三種我們在以前章節已經有所交待,在此我們只正研究第4種從URL處裝載。
在屬性工具箱中,可以讓電子表格組件打開一個特定的URL,并將該URL處查找到的第一個HTML表格進行加載(注意:電子表格組件不能直接從一個二進制XLS文件中裝載數據)。CSV(以逗號間隔的文本)缺乏格式化或公式的信息,因此,只能從CSV流中加載原始數據。數據是保留在URL所指的文件中的,電子表格組件會在每次初始化時加載這些數據。當然,這個URL可以方便地指向一個Microsoft的動態服務器頁面(ASP)或者是一個CGI程序,這個頁面或程序從企業數據庫或其它的存儲系統中動態的生成HTML表格,這樣就使得能夠將動態,最新的數據加載到電子表格組件中。
4.2 編程模型要點
以下講述的是spreadsheet組件編程模型的要點,讓我們明白該組件應該如何應用。在這里會介紹幾種常用的屬性和方法。
在腳本中使用枚舉
COM和OLE自動化允許組件定義枚舉,每個枚舉都是指定的一組常量,作用類似編程語言中的類型聲明?梢詫⒁粋枚舉用作屬性或方法的參數,這使得如VB和VC這樣的環境能夠顯示包含一個枚舉中有效常量的語句完成下拉列表。OWC和其它許多ActiveX組件一樣,包含了一系列預定義的枚舉。
不過,在例如Web頁面或asp頁面這樣的腳本環境中,不存在類型的概念。因此,在現有的這些腳本語言中不能使用枚舉成員名稱,因為這些語言無法知道一個特定的常量(例如ssHAlignLeft)對應的是什么。這意味著的VBScript腳本代碼會因為不能自描述的神秘數字而混亂不堪。
為了盡量解決這個問題,所有的OWC組件都有一個名為Constants的頂級屬性,在腳本語言中可以使用這個屬性訪問組件的各種枚舉成員。例如,如果需要在VBScript代碼中使用ssHAlignLeft常量使一個單元的內容居左顯示,您可以這樣書寫代碼:
MyRange.HAlignment = Spreadsheet1.Constants.ssHAlignLeft
為了使用一個枚舉常量,您可以把它當作Constants對象的一個屬性來引用它,而對象將返回枚舉成員的正確的值。
constants屬性返回一個對象,它允許 VBScript 程序員使用已命名的常量。本屬性可應用于每個頂層容器對象(ChartSpace、DataSourceControl、PivotTable 和 Spreadsheet)。它返回一個含有所有已命名常量的對象,這些常量都可用于“Microsoft Office Web 組件”的類型庫中(不論 Constants 屬性應用于何種對象,它總返回已命名常量的完整集合)。
要在 VBScript 中使用已命名的常量,則可將某對象變量設置為由 Constants 屬性所返回的對象,然后在代碼中使用此對象來限定已命名的常量,如下例所示。
Set c = ChartSpace1.Constants
Set valueAxis = ChartSpace1.Charts(0).Axes(c.chAxisPositionLeft)
如果只使用一個常量,則可以直接在表達式中使用 Constants 屬性。如下例所示。
Spreadsheet1.ActiveSheet.Export"sstest.xls", Spreadsheet1.Constants.ssExportActionNone
請注意,如果您計劃在您的函數的多處使用常量對象,那么設置一個等于Constants對象的變量是很有用的,這樣做既避免了不必要的打字,也能夠提高性能。例如,您可以這樣書寫代碼:
Set c = Spreadsheet1.Constants
MyRange.HAlignment = c.ssHAlignRight
MyRange.VAlignment = c.ssVAlignBottom
Constants對象只在沒有枚舉概念的腳本語言中有意義。如果您是在VB,VBA或C++中編寫代碼,請象平常那樣直接使用枚舉,不用理會Constants對象。
將數據輸入組件
之前我已經講述了多個將數據輸入組件的技巧。我現在將更詳細的描述編程模型中的這些技巧。表4列出了與裝載數據相關的屬性和方法,所有這些屬性和方法都通過電子表格對象的接口公布。
表 4 裝載數據相關的屬性和方法
屬性或方法 描述
Spreadsheet.DataType 字符串類型的屬性,告訴電子表格組件在多個用于裝載數據的屬性被設置時,應該使用哪個屬性來裝載數據,賦給這個屬性的值就是應該用來裝載數據的那個屬性的名稱――例如,將這個屬性設置為HTMLURL,會使組件裝載從屬性HTMLURL中的URL處 獲得的數據。
Spreadsheet.HTMLURL 字符串類型的屬性,包含了一個URL,可以從這個URL處裝載電子表格的數據。這個URL必須返回一個包含了表格的HTML文檔。使用Excel 2000中來保存為HTML格式的電子表格可以使用這個屬性來裝載,這個屬性也可以是一個從數據庫中實時生成表格的ASP頁面或CGI程序。
Spreadsheet.CSVURL 字符串類型的屬性,和屬性HTMLURL類似,不過它希望從URL處獲得的數據格式是CSV格式的。就象HTMLURL屬性一樣,這個URL可以是一個從數據庫中實時生成表格的ASP頁面或CGI程序。
Spreadsheet.LoadText 可以將一個被分隔的文本文件載入電子表格的方法。與CSV格式不同的是,這個文本文件可以使用任何字段分隔符。
使用區域
電子表格組件中最常使用的編程接口是Range對象。很多方法都返回Range對象,當需要對一個區域的各單元進行修改,格式化,排序和設置自動篩選時,都會用到Range對象。表5顯示了在建立電子表格組件的解決方案時應該了解的Range對象的屬性和方法。
表 5 Range對象主要的屬性和方法
屬性或方法 介紹
Spreadsheet.Range 該方法接受一個區域引用(例如A1:B2或A:B),返回一個Range對象。因為一個區域可以只有一個單元,因此您也可以傳入單個單元的引用(例如A1)。該方法也可以接受兩個不同的單元引用,而返回一個含蓋這兩個單元的區域。
Range.Address 該屬性返回一個區域的地址(例如,A1:B2)。
Range.Cells 將該屬性當作多個單元的一個集合,也就是說可以使用For Each循環訪問其中的每一個單元。該屬性也可以以二維數組的形式來訪問。例如,MyRange.Cells(1,3).Value會返回區域中行1,列3的值。
Range.Column, Range.Row 這些屬性指出區域中首行和首列的編號。當您在一個區域的行和列中進行迭代時,如果需要知道當前位于哪行哪列,這個屬性非常有用。
Range.Columns, Range.Rows 雖然在名稱上和前兩個屬性非常相似,但是這對屬性返回的是Range對象包含的行或者列的集合。Range.Columns.Count和Range.Rows.Count可以告訴你當前區域中行和列的數目。
Range.Value 該屬性獲得或設置區域的值。雖然幫助文件說在區域由多個單元構成時Range.Value會返回一個二維變量數組,但實際上當前版本中這是沒有實現的。不過,Range.Value可以接受一個二維數組的變量,來將數據輸入區域中,當你需要使用文字值設置一個或多個單元值,或者是需要獲得一個單元的無格式(即沒有格式化的值)的值時,可以使用這個屬性。
Range.Text Range.Text屬性返回Range.Value屬性的格式化版本。當您需要在消息框或另一個用戶界面元素中顯示格式化的值時這個屬性很有用,該屬性值就是您在添加AutoFilter對象的過濾條件時傳入的值。
格式化
在將數據載入電子表格后,您可能需要通過編程來控制格式化。每個單元都有自己的字體,對齊方式,邊框,顏色和數字格式屬性,所有這些特征都可以使用表6中的屬性來設置。
表 6 用于格式化的屬性
屬性 描述
Range.NumberFormat 字符串類型的屬性,控制單元中數字的格式?梢砸矛F有的格式名稱來使用眾多的內置格式(例如Currency)。也可以創建自定義格式(例如,#,###,使1000顯示為1,000)。
Range.Font 返回一個許多組件都能使用的常用的Font對象。Range.Font允許設置Font對象的的多個屬性,例如Name,Size,Bold,Italic,Color和Underline。請注意,如果需要,可以在Font.Color屬性中使用IE的顏色名。
Range.Halignment, Range.Valignment 這兩個屬性控制區域的各單元水平和垂直方向上的文本對齊方式。每個屬性中定義了各自可以使用的對齊方式的枚舉值。
Range.Borders 該屬性返回一個Borders對象,可以通過它來設置每個單元邊框的各個特性,如邊框線的線粗,樣式及顏色。
組件級的外觀和行為
許多屬性和方法會影響整個電子表格組件。表7列出了定制的解決方案中最有趣的屬性和方法。
表7影響整個電子表格的主要屬性
Property Description
Spreadsheet.DisplayColHeaders, Spreadsheet.DisplayRowHeaders 控制是否顯示行頭和列頭。這兩個屬性的缺省值是True。通常,您可以在需要使用您自己的代碼來對電子表格界面進行完全控制時將這兩個屬性設置為False。
Spreadsheet.DisplayGridlines 控制是否顯示網格線。缺省是要顯示的,如果在定制解決方案中,要在需要單元分隔線的地方使用邊框,則常關閉這個屬性。
Spreadsheet.DisplayPropertyToolbox 控制是否顯示屬性工具箱。將屬性置為true則顯示,置為false就會隱藏。
Spreadsheet.DisplayTitleBar 控制是否顯示標題欄。缺省是顯示標題欄的。可以使用下面介紹的TitleBar屬性來修改標題欄上的內容和格式。
Spreadsheet.DisplayToolbar 控制是否顯示工具條。缺省是顯示。
Spreadsheet.EnableAutoCalculate 控制電子表格模型如何重算。如果這個屬性被置為false,電子表格模型不會自動重算;必須調用工作表對象的Calculate方法,才能看到改變輸入后的新結果。在計劃修改一系列的輸入,并且希望只有在完成所有的修改后,才重算模型時,這個屬性非常有用。這個屬性缺省為True――模型會在電子表格被修改時自動進行重算。
Spreadsheet.ScreenUpdating 缺省情況下,電子表格在屏幕上的顯示總是反映最新的數據,不過如果計劃執行大量的操作,而不希望電子表格在每一個操作之后都會因為更新而閃爍?梢詫⑦@個屬性置為Fasle。將這個屬性重新設回True會觸發一個徹底的重繪動作。
Spreadsheet.Selection 返回當前選擇的對象?梢允褂肰BA或VBScript中的TypeName函數來判斷這個對象的類型。
Spreadsheet.TitleBar 使您可以訪問電子表格的標題欄,可以改變標題欄的文本和格式。
排序和過濾
表8 列出了在電子表格組件中排序和過濾數據時可以使用的屬性和方法。
表8 具有排序和過濾功能的屬性和方法
屬性或方法 介紹
Range.Sort 根據給定的列和排序方法對區域進行排序。
Worksheet.AutoFilter 該屬性返回一個AutoFilter對象,該對象可用來設置當前過濾器的細節。
AutoFilter.Filters 該屬性返回當前自動過濾區域的過濾器集合。一個過濾器對象應用于自動過濾區域中的一列,過濾器對象的下標和對應區域中列的下標相對應。
AutoFilter.Apply 該方法應用一個新的自動過濾。在設置完過濾條件后,必須調用這個方法來實應用過濾器。
Criteria.FilterFunction 該屬性控制符合過濾條件的項是包括在過濾器中,還是被排除在過濾器之外。如果是包含,則過濾器僅包含符合過濾條件集合的項,而如果是排除,則過濾器包含除了哪些符合過濾條件集合的項之外的所有項。
Criteria.ShowAll 該屬性決定是否顯示所有的數據。當設為True時,該屬性重置過濾器來顯示所有的數據。當設為False時,假如沒有任何過濾條件,將不顯示任何數據。
Criteria.Add 該方法將一個新的過濾條件添加到過濾器中。
Range.AutoFilter 該方法針針對一個給定的區域打開AutoFilter開關。首先調用這個方法,然后使用Worksheet.AutoFilter屬性(如上所述)訪問過濾器并設置過濾條件。
保 護
如果需要保護電子表格的某部分,使您的用戶不能修改單元內容或改變單元格式,您需要使用控制保護功能的各屬性。表9列出了常用的具有保護功能的屬性,并給出如何使用每一個屬性的簡短的描述。
請注意,保護設置即通過用戶界面應用到用戶交互中,也應用到代碼中執行的操作中。因此如果您在一個保護選項被啟用的情況下需要刪除一行,您必須在執行刪除操作前將Protection對象的Enabled屬性設置為False,并在完成操作后,將Enabled屬性設回True以便返回到受保護的狀態。
表 9 常用的具有保護功能的各屬性
屬性 描述
Worksheet.Protection 返回一個Protection對象,可以使用它設置各種保護選項,從而啟用各種全局操作(例如:插入和刪除行)。
Protection.Enabled 控制一般情況下是否啟用保護。在需要使用保護選項或鎖定單元格時,首先設置選項或者鎖定單元格,然后將這個屬性設為True。當需要在代碼中執行操作時,可以將該屬性設為False來暫時禁止保護功能。
Protection.AllowInsertingColumns, Protection.AllowInsertingRows, Protection.AllowDeletingColumns, Protection.AllowDeletingRows 允許或禁止在電子表格中插入、刪除列或行。例如,如果AllowInsertingRows被設為False,則電子表格會禁止所有用來插入一行的命令,包括哪些編程模型中的命令。
Protection.AllowSizingAllColumns, Protection.AllowSizingAllRows 允許或禁止調整列或行的大小。例如,如果AllowSizingAllRows被設為False,電子表格就不會允許用戶調整行的大小,也不會允許您通過代碼來這樣做。
Protection.AllowSorting 允許或禁止在電子表格中排序數據。將AllowSorting設為False會禁止用戶對任何區域中的內容進行排序。
Protection.AllowFiltering 允許或禁止使用自動篩選功能。將這個屬性設為False會禁止用戶啟用自動過濾功能。
撤 消
表10 列出了當您控制電子表格組件的撤消機制時會用到的有關的屬性和方法。
表 10 控制撤消機制相關的屬性和方法
屬性和方法 描述
Spreadsheet.BeginUndo 一個使您可以將一系列的操作看作一個撤消操作的方法。例如,如果您調用BeginUndo方法,然后執行了三個不同的排序動作,或改變了許多單元,您可以一下撤消所有這些操作。
Spreadsheet.EndUndo 一個標記您的邏輯撤消單元的結束的方法。在調用BeginUndo方法和調用EndUndo方法之間執行的所有操作會被當前一個單一的單元來撤消。
Spreadsheet.EnableUndo 該屬性控制撤消功能是否可用。缺省是可用的。您可能需要暫時禁止這個功能,以便節約內存或在代碼中執行大量的操作。
參 考 文 獻:
[1] David stearns. 《Programming Microsoft Office 2000 Web Components》.Microsoft Corporation. 2004.5
[2] 北京宏遠電腦培訓中心. 《Office 2000綜合應用短期培訓教程》. 北京工業大學出版社
[3] China Microsoft.《Microsoft Office 2000 Web 組件基礎》
【Excel Web組件的應用(一)】相關文章:
Excel在教學與管理中的應用03-21
論Excel在日常工作中的應用03-27
分布式對象技術及其在Web上的應用03-18
硬件密碼組件與軟件密碼組件的比較研究03-18
淺析Excel數據分析在醫學統計中的應用03-18