【正文】
代碼,應(yīng)用程序就是由多個(gè)這樣的組件打包而得到的。此時(shí)的應(yīng)用程序可以隨新組件不斷取代舊的組件而漸趨完善。操作系統(tǒng), 硬件 及客戶需求的改變都必須等到整個(gè)應(yīng)用程序被重新生成。 COM 并不是一個(gè)大的 API,它實(shí)際上象結(jié)構(gòu)化編程及面向?qū)ο缶幊谭椒菢?,也是一種編程方法。并且組件可以在運(yùn)行時(shí)刻,在不被重新鏈接或編譯應(yīng)用程序的情況下被卸下或替換掉。 COM 是開(kāi)發(fā)軟件組件的一種方法。為了避免用戶做大量重復(fù)性的工作,提高 Office 辦公效率,達(dá)到提高其實(shí)用功能的目 的 ,可根據(jù)具體工作內(nèi)容要求,編寫(xiě)出最具本地化、個(gè)性化、最合適的軟件 。但是可以很輕松地記住一幅圖畫(huà)或者一個(gè)曲線。軟件可以對(duì)用戶輸入的、用字符串表達(dá)的判斷條件進(jìn)行計(jì)算 ,并根據(jù)計(jì)算結(jié)果,將滿足條件的單元數(shù)據(jù)設(shè)置為用戶選擇的特殊格式(字體、 顏色、字號(hào)、修飾等) 關(guān)鍵詞: Excel 插件 ; COM 組件 ; 接口The Design and Implementation of the Conditionally Formatting Tool for Excel Abstract Excel is an electronic sheet software which is extensively used in various fields. By using it, we can anize and manage data, statistically analysis data easily. In practical applications, we need it usually need to specially show some data under certain conditions. This function can be achieved by using Excel macros. However,such a method is inconvenient in writing similar codes in each time. Excel, as long as other Microsoft Office softwares, povides a standard plugin interface, also called addin, to allow users to expand its functionalities. By writing addins for Excel, we can almost unlimitedly to expand its functionality and makes our work more easily and effectively. This paper introduces the design and implementation of an Excel conditional formatting addin, which is implemented by the COM ponent technique according to the interface requirements of Excel. The conditional formatting addin adds a new Toolbar into Excel, on which there is a button to be used to open the format setting dialog. The software can calculate the results of the condition expressions inputted by the user in the form of string, and according to the result, it sets the format of the cells matching the usedefined condition to special formats (font, color, font size and decoration) that was inputted by the user. Key words: Excel Addin。通過(guò)編寫(xiě)和安裝插件,我們可以幾乎任意地?cái)U(kuò)展 Excel 的功能,為我們的工作提供極大的便利。通過(guò)它,我們可以很好的組織管理數(shù)據(jù),對(duì)數(shù)據(jù)進(jìn)行統(tǒng)計(jì)分析等。在實(shí)際應(yīng)用中,我們發(fā)現(xiàn)經(jīng)常需要根據(jù)某種特定的條件,特殊顯示部分?jǐn)?shù)據(jù)。本文詳細(xì)介紹了一個(gè)Excel 條件格式化軟件的 設(shè)計(jì)和實(shí)現(xiàn)。 COM Component。 Excel 就 具有許多高級(jí)的制圖功能,同時(shí)使用起來(lái)也非常 方便。 2 COM組件的實(shí)現(xiàn)技術(shù) COM 組件技術(shù) COM 是微軟公司為了計(jì)算機(jī)工業(yè)的軟件生產(chǎn)更加符合人類的行為方式開(kāi)發(fā)的一種新的軟件開(kāi)發(fā)技術(shù)。組件實(shí)際上是一些小的二進(jìn)制可執(zhí)行程序,它們可以給應(yīng)用程序, 操作系統(tǒng) 以及其他組件提供服務(wù)。 Microsoft 的許多技術(shù),如 ActiveX, DirectX 以及 OLE 等都是基于 COM 而建立起來(lái)的。在任何一種操作系統(tǒng)中,開(kāi)發(fā)人員均可以遵循“ COM 方法”。目前這種狀況已經(jīng)發(fā)生變化。而且利用已有的組件,用戶還可以快速的建立全新的應(yīng)用。單模應(yīng)用程序只有一個(gè)二進(jìn)制代碼模塊。使用組件的優(yōu)點(diǎn):組件架構(gòu)的一個(gè)優(yōu)點(diǎn)就是應(yīng)用可以隨時(shí)間的流逝而發(fā)展進(jìn)化。動(dòng)態(tài)鏈接對(duì)于組件而言是一個(gè)至關(guān)重要的要求,而消息隱藏則是動(dòng)態(tài)鏈接的一個(gè)必要條件。這有點(diǎn)像 OSI 網(wǎng)絡(luò)協(xié)議分層 模型,每一層就像一個(gè)組件,它內(nèi)部的實(shí)現(xiàn)細(xì)節(jié)對(duì)于其他層是不可見(jiàn)的;而每一層通過(guò) “ 服務(wù)接入點(diǎn) ” 向其上層提供服務(wù),這就像這里所說(shuō)的接口。 接口提供了兩個(gè)不同對(duì)象間的一種連接。 COM 中的接口也涉及到一組由組件實(shí)現(xiàn)并提供給客戶使 用的函數(shù)。 接口的作用:在 COM 中接口就是一切。在某些情況下,客戶甚至不必知道一個(gè)組件所提供的所有接口。只要新的組件支持同組件相同的接口,那么整個(gè)應(yīng)用程序?qū)⑷匀荒軌蚬ぷ鳌? 接口同木板房中的大梁非常類似。如果接口設(shè)計(jì)得好的話,將可以得到可復(fù)用極高的結(jié)構(gòu)。這些優(yōu)點(diǎn)是通過(guò)接口將某個(gè)特定的行為封閉起來(lái)而獲得的。插件響應(yīng)宿主程序中對(duì)這些項(xiàng)目的操作,并對(duì)宿主程序中的數(shù)據(jù)進(jìn)行特定操作 。插件的本質(zhì)是在不修改程序主體的情況下對(duì)軟件功能進(jìn)行加強(qiáng),當(dāng)插件的接口被公開(kāi)時(shí),任何公司或個(gè)人都可以自己制作插件來(lái)解決一些操作上的不便或增加一些功能。插件 類型從廣義的范圍來(lái)看,插件有以下三種類型: 1.類似批命令的簡(jiǎn)單插件。功能比較單一,可擴(kuò)展性極小。比如微軟惹了很多麻煩的宏就是這種類型的。例如 PhotoShop 等軟件使用的方法。 EXCEL 對(duì)象模型 Excel對(duì)象模型的類以及之間的關(guān)系 Excel 組件中定義了大量的類。具體步驟如下: a)從 VB6工程 菜單中選擇 引用 ; b) 在 引用 對(duì)話框中選擇 Excel 類型庫(kù): Microsoft Excel Object Library; c)單擊左邊小方框,使之出現(xiàn) √ 符號(hào); d)按 確定 退出。 為此,首先要聲明對(duì)象變量: Dim VBExcel As Object 或直接聲明為 Excel 對(duì)象: Dim VBExcel As 在聲明對(duì)象變量之后,可用 CreateObject 函數(shù)或 GetObject 函數(shù)給變量賦值 。 b)用 GetObject 函數(shù)打開(kāi)已存在的對(duì)象引用: Set AppExcel=GetObject(, ) 上面語(yǔ)句打開(kāi)文件 。 Evaluate 方法 求值數(shù)學(xué)表達(dá)式并返回結(jié)果??梢酝ㄟ^(guò) Workbooks 集合或表示當(dāng)前活動(dòng)工作簿的 Active Workbook 對(duì)象訪問(wèn) Workbook 對(duì)象。 Save 方法 按當(dāng)前路徑和名稱保存現(xiàn)有工作簿 (如是首次保存,則將其保存到缺第 7 頁(yè) 共 23 頁(yè) 省名稱中,如 )。如省略將從起始位置開(kāi)始打印。如省略將只打印一份。 ToFile:如果為 True 則打印輸出到文件。一個(gè) Worksheet 對(duì)象代表一個(gè)工作表。 Select 方法 選擇工作表。 PrintOut 方法 打印工 作表 示 例:將 C盤(pán)工作簿中的工作表復(fù)制到 A 盤(pán)工作簿中 Dim VBExcel As Set VBExcel=CreateObject() With VBExcel . C: \Temp\ .A: \ .Workbooks().Sheets (Sales).Copy .Workbooks() .Workbooks().Save .Workbooks().Close .Workbooks().Close .Quit End With 使用單元范圍 對(duì)象( Range): Range 對(duì)象代表工作表的某一單元格、某一行、某一列、某一選定區(qū)域或者某一三維區(qū)域 。 ? Rowl3eight 屬性 指定區(qū)域中所有行的行寬。 ? Copy 方法 將范圍的內(nèi)容復(fù)制到剪貼板。實(shí)際上, Microsoft Office 家族的 Word,PowerPoint, Access 和 Project 等應(yīng)用程序都可以在 VB 應(yīng)用程序中調(diào)用,其原理和步驟完全相同,只是其對(duì)象模型有所不同而已。 5MultiUse:可以創(chuàng)建多個(gè)實(shí)例。如添加以下代碼,定義了該對(duì)象缺省接口的 Hello 方法: Public Sub Hello(sMsg As String) MsgBox sMsg End Sub 如果定義為 Private,則不是接口的方法,而是私有對(duì)象中的方法,對(duì)外不公開(kāi)。 COM 組件工程的名稱將出現(xiàn)在組件選擇對(duì)話框的列表中 圖 5 引用工程 ( 3)將新工程設(shè)置為啟動(dòng)工程。在 OnConnection 方法里定義Application 對(duì)象變量,并調(diào)用 方法,就可在程序運(yùn)行時(shí)加載工具欄。利用這種模式可以很容易 地在開(kāi)發(fā)環(huán)境中放置外接程序。并輸入模擬數(shù)據(jù)。相對(duì)的含義是:對(duì)當(dāng)前單元而言,求和的是 A1 到 D1。 設(shè)計(jì)器 圖 7 設(shè)計(jì)器 第 14 頁(yè) 共 23 頁(yè) 窗體的實(shí)現(xiàn) 圖 8 窗體 設(shè)置字體按鈕: 圖 9 設(shè)置字體按鈕 選擇字體 Private Sub cmdSetFont_Click() 選擇一個(gè)臨時(shí)單元 Dim rng As Range Set rng = 保存其原有字體設(shè)置 Dim size, italic, underline, strikethrough, bold, color, style, name size = italic = underline = strikethrough = bold = color = 第 15 頁(yè) 共 23 頁(yè) style = name = 使用 Excel 的標(biāo)準(zhǔn)對(duì)話框設(shè)置其字體 (xlDialogFontProperties).Show 保存其字體設(shè)置 mFontsize = mFontitalic = mFontunderline = mFontstrikethrough = mFontBold = mFontColor = mFontStyle = mFontName = 恢復(fù)其原有字體設(shè)置 = size = italic = underline = strikethrough = bold = color = style = name End Sub 單元填充按鈕: 圖 10 單元填充按鈕 Private Sub cmdBackGround_Click() 選擇一個(gè)臨時(shí)單元 Dim rng As Range Set rng = 保留原有設(shè)置 第 16 頁(yè) 共 23 頁(yè) Dim clrIndex, pClrIndex, p, pClr p = clrIndex = pClr = pClrIndex = 設(shè)置新的填充模式 (xlDialogPatterns).Show 保存設(shè)置 mPattern = mColorIndex = mPatternColor = mPatternColorIndex = 恢復(fù)臨時(shí)單元以前設(shè)置 = p = clrIndex = pClr = pClrIndex End Sub 保存單元格式設(shè)置的變量 Private Sub cmdCancel_Click() Unload Me End Sub Private Sub cmdFormat_Click() FormatSelectedCells Trim(txtFormula) MsgBox 格式化完成! Unload Me End Sub 類模塊設(shè)計(jì): ( 類模塊設(shè)計(jì)中包括“段”類和公式類 ) 1 段類 表示公式的一部分 , 可能是字符串 , 也可能是一個(gè)相對(duì)的位置 . 職責(zé) : 將相對(duì)位置轉(zhuǎn)換為當(dāng)前的絕對(duì)位置 根據(jù)當(dāng)前單元相對(duì)于公式原始位 置的偏移 , 計(jì)算絕對(duì)位置 第 17 頁(yè) 共 23 頁(yè) 2 公