王海波,王兆華
(中國傳媒大學計算機與網絡中心,北京 100024)
提供數(shù)據(jù)分析處理功能的Excel軟件,在人們的日常工作中得到了廣泛的使用。它可以應用于管理、統(tǒng)計、財經、金融等眾多領域。在使用Excel時,人們經常使用Excel的查找功能來查找Excel文件中的數(shù)據(jù)。目前Excel提供列表的形式來顯示查找到的所有數(shù)據(jù)。但在日常工作中,人們經常希望能夠把查找到的結果用特殊的標記突出顯示出來,或進一步把查找的數(shù)據(jù)直接復制到新的Excel文件中,而這些都是目前Excel所不能解決的。
本文通過Excel查找擴展組件SearchPro4Excel的開發(fā),為Excel的查找功能提供了查找結果突出顯示以及依據(jù)查找到的數(shù)據(jù)生成結果Excel文件的擴展功能。
為了對Excel軟件進行擴展,筆者研究了對Excel軟件進行擴展的方式以及Excel軟件的數(shù)據(jù)模型。作為Office軟件系列中的一種,Excel軟件的擴展方式遵循Office軟件擴展的統(tǒng)一方式。Excel軟件的數(shù)據(jù)模型可以幫助人們獲得Excel軟件提供的對象及其具備的屬性和方法,從而把查找擴展組件的功能與原有的Excel功能無縫地結合起來。
對于Office擴展軟件來說,主要有以下3種開發(fā)方式[1-4]。
(1)獨立的自動化可執(zhí)行程序(Office Automation Executable)。
它以獨立程序的方式運行。在獨立程序中,對Office軟件進行控制和自動化。獨立程序在自己的進程中運行,和Office軟件通過跨進程的通訊進行信息的交互。
(2)Office加載項(Office Add-in)。
它作為Office軟件的加載項執(zhí)行。當Office軟件被運行時,加載項程序同時被啟動。加載項程序運行在Office軟件的進程中。
(3)Office文檔程序(Code Behind an Office Document)。
它從傳統(tǒng)的VBA開發(fā)環(huán)境衍化而來。它的代碼嵌入在Office文檔中。當用戶打開包含程序的Office文檔時,其中的程序同時被執(zhí)行。
在Excel中,主要的對象模型如圖1所示[5-7]。
圖1 Excel對象模型
圖1中,各主要對象的含義如表1所示。
表1 Excel對象模型含義
通過這些對象以及這些對象提供的屬性和方法,可以對Excel中的各個對象進行操縱。
筆者在Visual Studio中采用Office加載項的方式來開發(fā)Excel查找功能擴展組件SearchPro4Excel。它的主要功能是對查找結果突出顯示以及將查找到的數(shù)據(jù)生成結果Excel文件。
為了適應不同用戶的習慣,SearchPro4Excel采用了任務窗格和對話框這兩種交互方式,用戶可以根據(jù)自己的需要選用其中的一種。為了給用戶提供啟動SearchPro4Excel的入口,需要對Excel的功能區(qū)進行擴展。筆者在Excel的“加載項”功能區(qū)增加了如圖2所示兩個功能按鈕,分別用來啟動查找任務窗格和查找對話框。
對于任務窗格來說,打開后它將位于Excel窗口的右側,如圖3所示。
圖2 功能區(qū)按鈕
圖3 任務窗格
圖3中包含的主要交互元素及其含義是:“查找內容”文本框:在Excel中查找的數(shù)據(jù)。
“突出顯示”下拉列表:分“僅數(shù)據(jù)所在單元格”及“數(shù)據(jù)所在行”兩個選項,用來設置突出顯示的范圍。
“查找結果復制到新的工作薄中”復選框:如果此復選項被選中,則自動把查找到的數(shù)據(jù)行復制到新的工作薄中,形成一個新的文件。
查找對話框的界面與查找任務窗格的界面基本相同,也包括上述這些交互元素。
2.2.1 功能區(qū)
通過Visual Studio中添加“功能區(qū)(可視化設計器)”可以在項目中增加一個功能區(qū),并可以拖動控件中的“Button”以及“ToggleButton”到功能區(qū)的組中。
為了使得通過“ToggleButton”控制任務窗格的顯示和隱藏,需要添加以下的成員變量:
2.2.2 交互控件數(shù)據(jù)獲取
在查找面板中,對交互控件“查找內容”文本框、“突出顯示”下拉列表、“查找結果復制到新的工作簿中”復選框分別賦以表2所示名稱和變量。
獲得用戶輸入數(shù)據(jù)的方式如下:
2.2.3 查找功能
查找功能主要借助Excel中Application對象的cells屬性的find方法來實現(xiàn)。find方法的原型如表3所示。
expression.Find(What,After,LookIn,LookAt,SearchOrder,SearchDirection,MatchCase,MatchByte,SerchFormat)
表3 find方法原型
查找時的循環(huán)過程可以用如下流程來描述:
Step1 設置mCells為代表Excel文件所有單元格的變量。
Step2 currentFind=mCells.find(),使用用戶輸入的查找詞作為參數(shù)。
Step3 While currentFind不為空
//對數(shù)據(jù)所在單元格進行突出顯示處理
其中,currentFind是Range類型的對象,它表示查找到的數(shù)據(jù)所在單元格。
2.2.4 突出顯示功能
根據(jù)用戶的選擇,可以突出顯示查找數(shù)據(jù)所在的單元格或者查找數(shù)據(jù)所在的整行。
(1)突出顯示查找數(shù)據(jù)所在的單元格:
其中,Interior是Range對象currentFind的屬性,通過它可以改變currentFind的顏色,65535是用來進行突出顯示的顏色值。
(2)突出顯示查找數(shù)據(jù)所在的整行:
其中,通過currentFind.Row獲得數(shù)據(jù)所在單元格的行,從而把數(shù)據(jù)所在行突出顯示。
2.2.5 查找結果復制到新的工作簿中
如果用戶選擇把查找結果復制到新的工作簿中,則創(chuàng)建一個新的Excel工作薄文件,并把查找結果所在行復制到這一新的工作薄中。
其中,通過Application對象創(chuàng)建一個新的工作薄文件mNewBook,然后把查找到的數(shù)據(jù)所在行按照原來行的位置復制到這一新的工作薄中。
2.2.6 發(fā)布
在Visual Studio中,有內置的發(fā)布程序制作功能[8],如圖4所示。通過這一功能,可以生成Search-Pro4Excel的安裝包,從而可以在用戶的計算機中進行安裝。
圖4 制作發(fā)布程序
除了SearchPro4Excel組件自身之外,還需要把以下4個程序組件安裝到用戶的計算機中:Windows Installer 3.1、.NET Framework 4、Visual Studio 2010 Tools for Office Runtime、Microsoft Office主互操作程序集。
對于某一Excel文件,希望對其中商品類別是“日用品”的數(shù)據(jù)行進行突出顯示,通過點擊“加載項”功能區(qū)的“查找任務窗格”按鈕,在“查找任務窗格”中輸入要查找的內容以及設置數(shù)據(jù)突出顯示的方式為“數(shù)據(jù)所在行”,點擊“查找”后,則對包含“日用品”的數(shù)據(jù)行自動進行以改變背景為方式的突出顯示,如圖5所示。
圖5 突出顯示的數(shù)據(jù)查找結果
如果用戶選擇了“查找結果復制到新的工作簿中”,則會生成一個新的Excel文件,并把含有“日用品”的數(shù)據(jù)行復制到這一新的Excel文件中,如圖6所示。
圖6 僅包含查找數(shù)據(jù)所在行的新文件
借助SearchPro4Excel的使用,用戶可以直觀地感受到所查找數(shù)據(jù)在Excel文件中的位置和分布,避免了Excel自身的查找功能只能列表顯示數(shù)據(jù)所在位置的缺陷,并且可以以新文件的形式對查找數(shù)據(jù)所在行進行聚合。
針對Excel的查找功能不具備對查找到的數(shù)據(jù)進行突出顯示的缺點,筆者開發(fā)完成了 Search-Pro4Excel這一針對Excel的查找功能擴展組件。通過對Excel的功能區(qū)和任務窗格的重新定制,形成了SearchPro4Excel與用戶之間的交互界面。結合Excel提供的內置對象,完成了對Excel數(shù)據(jù)的查找以及突出顯示的功能,并進一步可以把相關的數(shù)據(jù)以復制到新的Excel文件中的方式聚合起來。這一組件有效地補充了Excel的查找功能,在實際應用中可以輔助用戶對數(shù)據(jù)進行分析,取得了良好的效果。
[1]Carter E,Lippert E.VSTO開發(fā)指南[M].王永,等譯.北京:電子工業(yè)出版社,2008.
[2]McGrath K,Stubbs P.VSTO開發(fā)者指南[M].李永倫譯.北京:機械工業(yè)出版社,2009.
[3]Carter E,Lippert E.Visual Studio Tools for Office[M].Addison Wesley,2006.
[4]McGrath K,Stubbs P.VSTO for Mere Mortals[M].Addison Wesley,2007.
[5]Steve S,Jeff W.Programming Excel with VBA and.NET[M].O’Reilly,2006.
[6]John W.Excel 2007 Power Programming with VBA[M].John Wiley& Sons,2007.
[7]Msdn.Excel對象模型概述[EB/OL].http://msdn.microsoft.com/zh-cn/library/wss56bz7,2012-09-21.
[8]Msdn.部署Office解決方案[EB/OL].http://msdn.microsoft.com/zh-cn/library/bb386179.asp,2012-09-21.
[9]余鵬飛,李海燕.基于COM Add-ins技術的Excel成績統(tǒng)計插件開發(fā)[J].計算機與數(shù)字工程,2006,34(10):16-19.
[10]John Walkenbach.中文版Excel 2010高級VBA編程寶典[M].冉豪,等譯.北京:清華大學出版社,2012.
[11]宋勇霖,楊逸翀,楊駿,等.基于VSTO開發(fā)Excel插件進行AHP分析的應用[J].醫(yī)學信息:上旬刊,2011(9):5983-5985.
[12]Nick R,Michael M,David G.Visual Studio 2010高級編程[M].任鴻,等譯.北京:清華大學出版社,2012.
[13]鄭宇軍,朱連軍.新一代.NET Office開發(fā)指南:Excel篇[M].北京:清華大學出版社,2006.
[14]Stephen B,Rob B,John G.Excel專業(yè)開發(fā)[M].杜茂康,等譯.北京:電子工業(yè)出版社,2007.
[15]伍遠高.Excel VBA開發(fā)技術大全[M].北京:清華大學出版社,2009.