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