摘要:現(xiàn)今各行業(yè)中大量單位均采用信息管理系統(tǒng)、辦公自動(dòng)化系統(tǒng)等實(shí)現(xiàn)工作及數(shù)據(jù)處理的自動(dòng)化,這些信息處理過程往往涉及大量文檔,尤其是一些OFFICE文檔。該文分析了OFFICE對(duì)象編程實(shí)現(xiàn)文檔數(shù)據(jù)自動(dòng)處理的原理。同時(shí)介紹了利用OFFICE對(duì)象編程進(jìn)行文檔合成,文檔數(shù)據(jù)比對(duì)等實(shí)例的實(shí)現(xiàn)過程。利用OFFICE對(duì)象編程進(jìn)行簡(jiǎn)便的二次開發(fā),可輔助信息系統(tǒng)更好地應(yīng)對(duì)用戶在文檔處理方面不斷產(chǎn)生的新需求。
關(guān)鍵詞:VBA;OLE自動(dòng)化;OFFICE對(duì)象
中圖分類號(hào):O141 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1009-3044(2012)31-7495-03
隨著計(jì)算機(jī)技術(shù)的發(fā)展和計(jì)算機(jī)的普及使用,各種信息管理系統(tǒng)被應(yīng)用,數(shù)據(jù)處理自動(dòng)化極大地提高了工作效率。雖然多數(shù)信息管理系統(tǒng)都是基于數(shù)據(jù)庫保存組織數(shù)據(jù)的形式開發(fā)的,但涉及普通文檔形式保存數(shù)據(jù)的情況時(shí),難免要利用文檔編程技術(shù)實(shí)現(xiàn)數(shù)據(jù)處理的自動(dòng)化。OFFICE文檔對(duì)象編程在許多針對(duì)OFFICE文檔的應(yīng)用中被廣泛使用,本文將介紹OFFICE對(duì)象編程的一般原理,并給出對(duì)EXCEL文檔進(jìn)行數(shù)據(jù)比對(duì),EXCEL文檔與WORD文檔結(jié)合進(jìn)行數(shù)據(jù)合成等實(shí)例的實(shí)現(xiàn)過程。各種信息管理系統(tǒng)多是針對(duì)前期需求分析開發(fā)的,當(dāng)用戶在系統(tǒng)使用中產(chǎn)生新的文檔數(shù)據(jù)處理需要時(shí),利用OFFICE文檔對(duì)象編程進(jìn)行簡(jiǎn)便的二次開發(fā)可快速滿足需求。
1 文檔數(shù)據(jù)自動(dòng)處理的原理
一般不同類型的文檔都有各自的文檔格式。在程序員角度,如果要編程實(shí)現(xiàn)程序讀、寫或處理文檔中的數(shù)據(jù),必須要了解文檔格式。對(duì)記事本文件、C語言源碼文件等一些格式簡(jiǎn)單的字符流文檔,無論用何種編程語言,一般函數(shù)庫中的普通文件處理函數(shù)就可實(shí)現(xiàn)文件讀寫操控,但OFFICE文件卻不同,其文檔格式較復(fù)雜,不是簡(jiǎn)單的字符流,其商業(yè)版權(quán)也使得其文檔格式并不對(duì)外公開。幸而微軟公司提供了OFFICE編程接口。
伴隨著微軟技術(shù)發(fā)展,OFFICE文檔對(duì)象編程技術(shù)形式不斷變化。早期為了讓應(yīng)用程序之間自動(dòng)獲取彼此的最新數(shù)據(jù),微軟推出對(duì)象的鏈接與嵌入技術(shù)(Object Linking and Embedded,OLE),應(yīng)用程序的AgWl9jZubjUsV/Wm0I4/GQ==數(shù)據(jù)交換提高到“對(duì)象交換”,程序間可獲得彼此的應(yīng)用程序?qū)ο?,從而可直接使用彼此的?shù)據(jù)內(nèi)容。但OLE1.0對(duì)象使用上還有許多限制,到OLE2.0階段,OLE自動(dòng)化、OLE控件、OLE文檔使應(yīng)用程序間能更好的相互協(xié)調(diào)工作。
OLE自動(dòng)化允許一個(gè)應(yīng)用程序自身暴露一些可編程對(duì)象給其它程序的應(yīng)用程序,被使用對(duì)象的一方是自動(dòng)化服務(wù)器,利用并操縱自動(dòng)化服務(wù)器提供功能的一方叫自動(dòng)化控制器。微軟還為其桌面應(yīng)用程序(尤其是Microsoft Office)推出了通用自動(dòng)化語言——VBA(Visual Basic for Application),利用VBA或其他編程語言都可以針對(duì)OFFICE文檔進(jìn)行編程,實(shí)現(xiàn)文檔數(shù)據(jù)的自動(dòng)化處理。
在EXCEL中利用VBA語言操縱單元格中的內(nèi)容,進(jìn)行計(jì)算或數(shù)據(jù)處理時(shí),EXCEL本身既是OLE控制器又是OLE服務(wù)器,若進(jìn)行創(chuàng)建WORD文檔等工作,則WORD是OLE服務(wù)器,EXCEL是自動(dòng)化控制器。如用VC或VB等編程語言在程序中創(chuàng)建并編輯一個(gè)Excel工作表,則開發(fā)的程序是自動(dòng)化控制器,EXCEL則是自動(dòng)化服務(wù)器。從實(shí)現(xiàn)上講OLE自動(dòng)化是利用面向?qū)ο缶幊趟枷氲纳罨?,以com組件技術(shù)實(shí)現(xiàn)。
無論以何種形式針對(duì)OFFICE文檔進(jìn)行面向?qū)ο缶幊蹋话愣际峭ㄟ^創(chuàng)建或獲得OFFICE文檔對(duì)象,通過對(duì)對(duì)象屬性、方法等的編程,實(shí)現(xiàn)程序?qū)FFICE文檔數(shù)據(jù)的自動(dòng)處理[1-5]。雖然隨著各種新技術(shù)和新名詞的出現(xiàn),VBA、OLE自動(dòng)化等技術(shù)看似已陳舊,但實(shí)際上在很多場(chǎng)合下,其數(shù)據(jù)處理的自動(dòng)性及開發(fā)快速的特性使得其仍有較大的應(yīng)用價(jià)值。
2 利用VBA進(jìn)行EXCEL中的數(shù)據(jù)對(duì)比
VBA不能獨(dú)立使用,需要一個(gè)宿主應(yīng)用程序,微軟的OFFICE軟件套裝中均支持VBA,并提供VBA編輯器方便開發(fā)。一般為了開發(fā)方便,用戶可以先錄制符合條件的宏,然后調(diào)整修改VBA代碼,編寫適合自己需求的自動(dòng)化程序,實(shí)現(xiàn)對(duì)OFFICE文檔數(shù)據(jù)的自動(dòng)處理[1]。
雖然Office 應(yīng)用程序隨著時(shí)間的推移已經(jīng)發(fā)生了演變,不可避免地提供不同的對(duì)象模型,但仍保存了一些一致性,VBA對(duì)象模型從上到下有著一般性的層次結(jié)構(gòu):
1) 頂層為Application 對(duì)象。Word、EXCEL、PPT等都有自己的Application對(duì)象。Application對(duì)象 代表了整個(gè)應(yīng)用。
2)不同的Application 對(duì)象下有不同的子對(duì)象。如EXCEL中是Workbooks 集合對(duì)象,而WORD則主要是Documents 集合對(duì)象。
3)再向下,EXCEL有Workbook對(duì)象代表 Microsoft Excel 工作簿,Worksheets集合對(duì)象代表指定的或活動(dòng)工作簿中所有工作表對(duì)象,再到Worksheet對(duì)象代表一張工作表,再通過Range和Cells到單元格。類似地,WORD中深化各個(gè) Document 對(duì)象,然后深化各個(gè) Range 對(duì)象。通過各種細(xì)節(jié)屬性及方法的使用完成對(duì)文檔的細(xì)節(jié)操控。
以銀行工作為例,業(yè)務(wù)數(shù)據(jù)一致性比對(duì)經(jīng)常發(fā)生,每次抽檢的數(shù)據(jù)字段可能不同,現(xiàn)有的信息系統(tǒng)可能無法提供這種臨時(shí)性的功能。此時(shí)就可以利用VBA在文檔中快速完成比對(duì)。如比較EXCEL文檔中兩列賬戶信息,篩選出B列中沒有出現(xiàn)在A列中的賬戶有哪些。此時(shí)EXCEL沒有合適的公式可用,但通過VBA中編程實(shí)現(xiàn)循環(huán)對(duì)比即可快速完成,示例代碼如下:
3 VB編程實(shí)現(xiàn)WORD文檔數(shù)據(jù)自動(dòng)整合到EXCEL
下面討論的實(shí)例基于這樣的應(yīng)用:?jiǎn)T工招聘時(shí)每個(gè)員工都有一個(gè)單獨(dú)的Word文檔,但現(xiàn)有的辦公系統(tǒng)不提供該格式WORD文件的處理,為了方便統(tǒng)一匯總和管理所有新員工信息,需要自動(dòng)批量處理這些WORD文檔,將文檔中需要的數(shù)據(jù)統(tǒng)一提取到EXCEL文件中。
FileSystemObject對(duì)象模型,是微軟提供的專門用來訪問計(jì)算機(jī)文件系統(tǒng)的,結(jié)合FSO和VBA對(duì)象編程可以批量處理OFFICE數(shù)據(jù)文檔。FSO模型并不是VBA的一部分,它以COM組件的形式提供,包含在腳本類型庫中。在VBA編輯器中使用時(shí),可選擇"Tools"菜單下"References...",在出現(xiàn)的對(duì)話框中選擇"Browser..."選中COM對(duì)象文件C:\Windows\System32\Scrrun.dll。在其他開發(fā)平臺(tái)中需通過相關(guān)的庫引用設(shè)置菜單引入相應(yīng)的項(xiàng)(如VB開發(fā)平臺(tái)需在工程|引用中添加microsoft scripting runtime)。
將多個(gè)WORD文檔數(shù)據(jù)批量提取到EXCEL的實(shí)現(xiàn)過程主要是通過VBA對(duì)象操控EXCEL文件,利用FSO循環(huán)處理文件夾下的批量WORD文件,這些WORD文件有相同的格式和數(shù)據(jù)表,利用VBA的WORD文檔對(duì)象獲取每個(gè)文件中的詳細(xì)信息,然后寫入到EXCEL文件中。如果沒有復(fù)雜的界面要求,完全可以直接在EXCEL文件中實(shí)現(xiàn)。本例利用VB開發(fā)平臺(tái)設(shè)計(jì)了一些簡(jiǎn)單的用戶交互界面,但本質(zhì)上仍然是FSO和VBA技術(shù)的結(jié)合使用,關(guān)鍵代碼如下:
4 結(jié)束語
對(duì)OFFICE文檔數(shù)據(jù)進(jìn)行處理,可以通過嵌入VBA的OFFICE文檔實(shí)現(xiàn);微軟還提供了VSTO(Visual Studio Tools for OFFICE),基于Visual studio平臺(tái)將應(yīng)用程序編程和VBA的OFFICE對(duì)象編程結(jié)合起來,實(shí)現(xiàn)更豐富的OFFICE文檔應(yīng)用的二次開發(fā);或者對(duì)現(xiàn)有的信息系統(tǒng)進(jìn)行二次開發(fā)。各種方式開發(fā)代價(jià)不同,都能實(shí)現(xiàn)文檔數(shù)據(jù)自動(dòng)處理,其本質(zhì)原理都是利用各種OFFICE對(duì)象模型實(shí)現(xiàn)的自動(dòng)化數(shù)據(jù)處理。在工作中可以根據(jù)不同的應(yīng)用環(huán)境和情況選擇最合適的方式提高數(shù)據(jù)處理自動(dòng)化程度,提高我們的工作效率。
參考文獻(xiàn):
[1] 王貴,石仙.利用VBA在Excel和Word中完成復(fù)雜的數(shù)據(jù)引用[J].電腦知識(shí)與技術(shù),2011,24(7): 5908 -5010.
[2] 劉永平.基于VBA的畢業(yè)設(shè)計(jì)文檔自動(dòng)生成系統(tǒng)[J].西安郵電學(xué)院學(xué)報(bào),2011,2(16):46-48.
[3] 余艷艷,周明剛.VC++實(shí)現(xiàn)Excel操作自動(dòng)化的方法研究與應(yīng)用[J].企業(yè)技術(shù)開發(fā):學(xué)術(shù)版,2010,29(2):7-9.
[4] 周靜,袁方,袁江鷺,等.基于VSTO的Office二次開發(fā)[J].福建電腦,2011(9):22-23,36.
[5] 桑銀邦,王成良.XML數(shù)據(jù)交換在Office二次開發(fā)中的應(yīng)用[J].計(jì)算機(jī)工程,2010,22(36):78-80.