唐云婷
(北海職業(yè)學(xué)院,廣西 北海 536000)
Microsoft Office文檔是日常辦公的主要軟件,其占據(jù)非常大的市場份額,在某些場合下需要對范圍限定的文檔進(jìn)行批處理,以判斷其內(nèi)容是否符合期望內(nèi)容,自動化處理是一個良好的解決方案。
Microsoft Office Word是微軟公司的一個功能強(qiáng)大、流行的文字處理器應(yīng)用程序,具備完善的文檔(如信函、論文、報表和手冊等)處理能力,作為 Microsoft Office 套件的核心程序,Word提供了許多易于使用的文檔創(chuàng)建工具,同時也提供了豐富的功能集供創(chuàng)建復(fù)雜的文檔使用。第一個Windows版本的Word發(fā)售于1989年,它被認(rèn)為是 Office 的主要程序,在文字處理領(lǐng)域其份額幾乎是統(tǒng)治級,其自稱規(guī)則的DOC格式也被推至行業(yè)標(biāo)準(zhǔn)。
Office系列軟件是高校計算機(jī)應(yīng)用基礎(chǔ)課的必學(xué)軟件,也是大學(xué)計算機(jī)等級考試的基礎(chǔ)軟件、日常辦公的常用軟件。Word是Office系列里重要的套件之一,圍繞Office自動閱卷的研究多如牛毛,但涉及的環(huán)境復(fù)雜,無法統(tǒng)一試題標(biāo)準(zhǔn),故目前市面上也沒有此類文檔自動處理軟件。
2002年,微軟發(fā)布了.NET Framework的第一個版本,并為其技術(shù)實現(xiàn)制訂了一套完整的規(guī)范,這套規(guī)范便是CLI(Common Language Infrastructure,公共語言基礎(chǔ)結(jié)構(gòu))。CLI由CTS(Common Type System,公共類型系統(tǒng))、CLS(Common Language Specification,公共語言規(guī)范)、CIL(Common Intermediate Language,公共中間語言)、CLR(Common Language Runtime,公共語言運行庫)、BCL(Base Class Library,基類庫)、元數(shù)據(jù)定義、語義及其他相關(guān)標(biāo)準(zhǔn)化文檔、協(xié)議、規(guī)范組成。Microsoft針對CLI在Windows上的完整實現(xiàn)便是 .NET Framework。
.NET Framework是由微軟開發(fā)的一個致力于快速應(yīng)用和部署、與平臺無關(guān)的透明化軟件平臺。.NET Framework集成了多語言組件開發(fā)和集成的環(huán)境(如C、C++、C#等),提供了一個統(tǒng)一的面向?qū)ο蟮木幊汰h(huán)境,這一集成將軟件部署和版本控制沖突的概率進(jìn)一步降低,其提供的跨語言(.NET Core已支持跨系統(tǒng))統(tǒng)一平臺旨在使開發(fā)人員更便捷地建立應(yīng)用程序,使這些應(yīng)用程序能夠無縫地運行在各種環(huán)境平臺下,達(dá)到一處開發(fā)隨處可用的目的。
1993年,微軟公司提出了一種組件技術(shù),其是一種面向?qū)ο蟮木幊棠J?,定義了對象在單個應(yīng)用內(nèi)部或多個應(yīng)用內(nèi)部的行為方式,是一種與平臺無關(guān)、位置透明且支持網(wǎng)絡(luò)的中間件技術(shù),這種技術(shù)就是組件對象模型,即COM(Component Object Model),它提供了一種在不同應(yīng)用程序和語言之間共享二進(jìn)制代碼的規(guī)范,是致力于Web服務(wù)器與客戶端、增益集與Office系列軟件之間交互的一項軟件組件技術(shù)。COM定義了軟件組件互相通信的方式,是一種二進(jìn)制和網(wǎng)絡(luò)標(biāo)準(zhǔn),允許任意兩個組件之間進(jìn)行通信而忽略它們所在的軟件環(huán)境(包括操作系統(tǒng)、編寫語言),只要環(huán)境支持COM即可。COM還提供了位置透明性,當(dāng)使用COM組件時,一切都變得透明,組件運行位置都將被忽略。
由于COM對象和.NET對象在生命周期、內(nèi)存管理、接口服務(wù)上的差異,運行時提供了包裝類來使其互相調(diào)用。Windows可以使用DLLs在二進(jìn)制級別共享代碼,如kernel 32.dll、user 32.dll等。
Word文檔本身是一個壓縮文件,如果對某個Word文檔進(jìn)行解壓會得到一堆XML文檔的存檔,由許多元素組成,這些元素通過一定的壓縮算法形成Word文檔,對Word的操作實際上是對組成Word文檔元素的操作,也就是對象操作。在Windows平臺,利用C#的面向?qū)ο筇匦约耙肅OM中的“Microsoft Word 12.0 Object. Library”庫(因本機(jī)安裝的版本不同,此對象庫的名稱可能不一樣,如Microsoft Word 14.0 Object. Library),搭建Word對象操作的運行環(huán)境,對Word中的元素或?qū)ο筮M(jìn)行實驗性操作,以研究其進(jìn)行自動化處理的可行性。
研究依靠Windows下的.NET平臺進(jìn)行測試時,本地環(huán)境是:
操作系統(tǒng)windows 10 Profession,開發(fā)環(huán)境.NET Framework 4.0,開發(fā)工具Visual Studio 2013 Express 、Microsoft Office2010,開發(fā)語言C#。
引入“Microsoft Word 12.0 Object. Library”,其是Office 2010版本中Word對象類庫,提供了豐富的操作Word所需的方法和函數(shù),將其引入后,可以使用其提供的方法或函數(shù)對Word文檔進(jìn)行編輯與操作,這是實現(xiàn)文檔自動化處理的前提,讓文檔成為可編程處理的對象。引用PIA(主互操作程序集,COM組件生成)時,可以設(shè)置是否嵌入互操作類型。嵌入互操作類型時,PIA不隨著程序一起部署,程序只是引用COM中的類型信息,好處是可以部署到不同COM版本的環(huán)境中。如常用的Office開發(fā)“Microsoft.Office.Interop.Word”,設(shè)置嵌入互操作類型,就可以不依賴Office版本,改為互操作false后也就將PIA復(fù)制到本地。
利用C#面向?qū)ο筇卣鳎谩癕icrosoft.Office.Interop.Word”提供的方法,通過基本的面向?qū)ο蟪绦蛟O(shè)計,實現(xiàn)對Word文檔中的對象進(jìn)行操作,現(xiàn)選取在Word中自動插入圖片,部分代碼如下:
1.wordApp.Selection.EndKey(ref unite, ref Nothing);
2.string filename=Environment.CurrentDirectory+″6.png″;
3.Object range=wordDoc.Paragraphs.Last.Range;
4.Object linkToFile=false;
5.Object saveWithDocument=true;
6.wordDoc.InlineShapes.AddPicture(filename, ref linkToFile, ref saveWithDocument, ref range);
7.wordApp.Selection.ParagraphFormat.Alignment=MSWord.WdParagraphAlignment.wdAlignParagraphCenter;
8.wordDoc.InlineShapes[1].ScaleWidth=20;
9.wordDoc.InlineShapes[1].ScaleHeight=20;
10.wordDoc.Content.InsertAfter(″ ″);
11.wordApp.Selection.EndKey(ref unite, ref Nothing);
12.wordApp.Selection.ParagraphFormat.Alignment=MSWord.WdParagraphAlignment.wdAlignParagraphCenter;
13.wordApp.Selection.Font.Size=10;
14.wordApp.Selection.TypeText(″北海職業(yè)學(xué)院logo ″);
對象操作完畢,結(jié)果存儲至外存,需要銷毀對象回收內(nèi)存,以保證系統(tǒng)資源的合理使用,可以在程序邏輯中顯式的銷毀對象釋放內(nèi)存,也可以利用C#的垃圾回收機(jī)制自動回收內(nèi)存。
實驗通過引用“Microsoft Word 12.0 Object. Library”類庫,利用C#面向?qū)ο笤O(shè)計方法,對Word文檔對象進(jìn)行了字體、圖片、表格等方面的自動化處理(篇幅所限僅展示一部分),實驗結(jié)果表明,利用自動化(其實是半自動)思想對Word文檔對象進(jìn)行批處理是可行的,這讓人們在處理大量格式統(tǒng)一卻重復(fù)的文檔時,有了更好的解決方案,提高工作效率的同時,節(jié)省了寶貴時間。
在.NET Framework框架下利用C#面向?qū)ο蠹夹g(shù),引入“Microsoft Word 12.0 Object. Library”類庫,介紹了利用程序邏輯操作Word對象的過程,以探索對Word文檔進(jìn)行自動化處理的可行性。得到實驗成果的同時,了解了要實現(xiàn)自動識別自動判斷是極其困難的,歸根結(jié)底是Word的靈活性導(dǎo)致,其功能復(fù)雜、靈活、細(xì)節(jié)豐富,實際應(yīng)用時必須結(jié)合當(dāng)前環(huán)境進(jìn)行邏輯設(shè)計和定制,才能實現(xiàn)自動化處理,這實際是一種半自動化處理方案。隨著信息技術(shù)的發(fā)展,云課堂的興起,圍繞批量文檔操作的研究和實踐也會越來越多,軟件功能也會越來越豐富,自動化程度也會越來越高。