?

基于VSTO的word文檔格式檢查插件的開發與研究

2016-11-24 17:19劉艷平
電腦知識與技術 2016年26期
關鍵詞:插件

劉艷平

摘要:隨著無紙化辦公的不斷推進,Microsoft Office辦公軟件逐漸成為主要的辦公工具。利用Word寫作文檔時,難免會出現各種格式和內容錯誤,人工校對錯誤難免產生疏漏。因此研究基于VSTO的文檔格式自動化檢查輔助插件能夠幫助使用者檢查相關錯誤。從VSTO的特性入手,首先分析了Word的對象層次模型,然后就標題格式檢查、正文重復詞組、段落格式化、表格信息校對等功能的實現進行了研究。

關鍵詞:VSTO;格式檢查;Office 插件

中圖分類號:TP317 文獻標識碼:A 文章編號:1009-3044(2016)26-0106-03

The Development and Research of Word Document Format-Checking Plug-in Based on VSTO

LIU Yan-ping

(Unit of 91413 PLA, Qinhuangdao 066000, China)

Abstract: With the continuous advancement of paperless office, Microsoft Office software have gradually become the main office tools. Using Word writing documents, there will inevitably be errors in various formats and contents, proofreading errors will inevitably produce omissions. Therefore, the research of document format-checking plug-ins based on VSTO can help users to check the errors. Beginning with the characteristics of VSTO, the object hierarchy model of Word is analyzed firstly. Then, the implementation of the title format-checking, the main body of repeated phrases, paragraph formatting, and Table information checking are studied.

Key words: VSTO; Format-Checking; Office Plug-in

1 背景

Microsoft Office是微軟公司提供的一套功能強大的辦公軟件,具有強大的文件處理能力,但是在處理部分業務內容時,Office自動化程度不夠,功能組合不夠靈活等問題較為突出,因此一般情況下通常會開發一些功能插件輔助完成個人業務,例如Excel中創建針對不同項目的預算工作表,Word的合同自動生成功能等。

VSTO(Visual Studio Tools for Office )是一個用于創建自定義Office應用程序的Visual Studio工具包,是VBA(Visual Basic for Application)的替代,這個工具包里面提供了許多類庫可以調用與Office客戶端進行交互[1]。相比傳統的VBA,VSTO可以使用Visual studio開發環境中的眾多功能和CLR提供的內存管理,垃圾回收等功能,使得可以開發性能更高,功能更加豐富的外接程序[2]。VSTO最早支持Office 2000開發相關組件,最新版本已經支持Office 2015。VSTO可以開發文檔級自定義項和應用程序級自定義項,文檔級自定義項是只和單一、特定的文檔相關聯,應用程序級外接程序與某個Microsoft Office應用程序相關聯。

Microsoft Office Word是一款強大的文字處理軟件,可以很好地處理常見的文字任務,但是在處理繁瑣的、機械性的、智能性的任務時,功能支持較為不佳。在工作中,部分單位常要處理大量的文字任務,文檔的格式問題極易忽略和漏改,這種“低級”問題常會給文檔閱讀者留下不好的印象,讓文檔寫作者頭疼不已。本文的研究針對Word的常見文檔格式檢查插件的開發技術。

2 Word對象模型

在Visual Studio中開發Word的解決方案時,是通過與Word的對象模型交互實現的,這種對象模型由Word的主互操作程序集中提供的類和接口組成,并且在Microsoft.Office.Intertop.Word命名空間中定義。這些對象排列在一個與用戶界面密切相關的層次結構中,Word對象模型抽象圖如圖1所示。

從圖1可以看出,對象模型存在重疊,這種層次關系可以方便開發者通過多種方式訪問相同類型的對象,例如要設置Bookmarks格式,可以訪問當前選定內容、當前文檔的范圍。在對象層次模型中,Application對象代表Microsoft Word應用程序,該對象的屬性可以控制Word環境;Document對象代表Word文檔及其所有內容,是Word編程的中樞;Selection對象代表當前選擇的區域,沒有選中區域時代表光標插入點,Selection對象可以表示不連續的區域;Range對象表示文檔的一個連續區域,一個文檔可以包含多個Range;Bookmarks是具有名稱的、可隱藏的書簽。圖1所示的對象層次結構明確了對象之間的調用路徑和方式,通過這5個基本對象的屬性、方法實現對Word文檔的操作。

3 插件功能的實現

3.1 項目的建立

建立Office操作項目的方式為通過Visual Studio開發平臺提供的模板,以C#語言開發Word2010為例,建立過程為“文件”→“新建項目”→“Visual C#”→“Office”→“2010”→“Word 2010 外接程序”→“輸入項目名稱”→完成。剛創建的VSTO外接程序只有一個ThisAddIn.cs文件,該文件即是一個宿主項,此宿主項提供對宿主應用程序(Office Word)和成員的對象模型的訪問,可以通過宿主項添加數據綁定的能力和提供額外的事件來擴展本地Office文檔。同時該類中有ThisAddIn_Startup和ThisAddIn_Shutdown兩個方法,ThisAddIn_Startup方法的邏輯是在加載外接程序時運行的,VSTO外接程序主要是在該方法中調用運行,ThisAddIn_Shutdown方法中的內容是在卸載外接程序時運行,例如警告對話框等[3]。新建的項目的頭部增加了如下兩行代碼:

using Office = Microsoft.Office;

using Microsoft.Office.Tools;

using Word = Microsoft.Office.Interop.Word;

此為Visual Studio自動引用的主互操作程序集(PIA),程序集中包含了Word的各級對象以及對象的屬性和方法,從而能夠與Office的COM對象交互。

3.2 標題格式

標題的章節號往往是手動添加,在修改文檔時,有時會調整章節順序,造成章節順序錯序,需要對標題章節號進行修改,手工修改容易因視覺疲勞產生疏漏,因此通過插件判別章節需要是否正確具有一定的實際意義。

標題序號的判斷過程為:如果是一級標題,如果不是第一個標題,則該一級標題比上一個一級標題大1,如果是第一個標題則為1;如果是二級標題,則此二級標題的第一個部分和上一個一級標題相同,第二個部分屬遞增模式,如果是三級標題,則該標題的前兩個部分和上一個二級標題相同,第三個部分屬遞增模式。VSTO實現該過程的簡要過程如下:

Word.Application app= Globals.ThisAddIn.Application;

Word.Paragraphs paras = app.ActiveDocument.Paragraphs;

int count=paras.Count;

for(int k=1;k<=count;k++)

{

switch(paras[k].OutlineLevel)

{

case Word.WdOutlineLevel.wdOutlineLevel1:

step1:字符串分割,取標題序號,判斷序號格式是否正確

step2:和上一個一級標題比較,判斷序號是否遞增

break;

case Word.WdOutlineLevel.wdOutlineLevel2:

case Word.WdOutlineLevel. wdOutlineLevel3:

}

VSTO向段落(paragraph)設置了大綱層次屬性,屬性用WdOutlineLevel枚舉(enum)集合表示,WdOutlineLevel集合包括9個級別的標題和正文。在上文的實現過程中,可以通過判斷段落的大綱層次識別當前段落是幾級標題,然后通過正則表達式獲取標題序號,判斷當前序號的格式和內容是否正確[4]。

3.3 正文格式

在文章寫作中,在整合不同來源的文章時,可能導致引入內容和源內容的格式不同,這種不同可能是行間距、字體大小、字體背景以及顏色的不同,如果手動檢查調整所有段落的格式,工作量大,部分錯誤可能被疏漏,因此需要研究一種自動化的統一設定段落格式的工具。

在操作時,需要選中一個設定完畢格式的段落,然后選擇格式化所有正文段落。在實現時,首先保存選定段落的格式,然后依次判斷每個段落的大綱級別是不是段落,如果是就把該段落的格式設定為已保存的格式。

Word.Paragraphs paras = app.ActiveDocument.Paragraphs;

int count=paras.Count;

var format= app.Selection.ParagraphFormat;

for(int k=1;k<=count;k++)

if(para[i]. OutlineLevel== wdOutlineLevel)

{

paras[i]. Format= format

}

在文檔寫作時,絕大多數時候字或詞組不會連續出現,如果連續出現,則可能是錯誤的,因此開發自動檢測重復字段的功能,向文檔寫作者提示重復字段具有現實意義。重復字段的檢查依賴正則表達式,開發時首先引入正則表達式的命名空間和相關類庫:

using System.Text.RegularExpressions;

然后取得當前選定區域的內容:

string content = Globals.ThisAddIn.Application.ActiveDocument.Content;

var words = Globals.ThisAddIn.Application.Selection.Words;

設計正則表達式并將重復字段的背景色置位黃色的的實現過程如下:

string pattern = @"(.{1,5})\1+[5]";

Regex regex = new Regex(pattern);

foreach (Match match in regex.Matches(input))

{

if (regex.IsMatch(input))

{

i = match.Index;

l = match.Length;

for(var k=I;i<=(i+l);i++)

{

words[k].HighlightColorIndex = Word.WdColorIndex.wdYellow;

}

}

else{

MessageBox.Show(“沒有重復詞組”)}

}

3.4 檢查表格中數字串

在信息登統計時,往往會處理銀行卡號、手機號、身份證號等長度較長的數字串,這些數字信息中常有重復的連續數字出現,導致多輸入或者少輸入若干位,通過插件檢測數字串的長度,進行初步的錯誤排查,能較大程度降低減少信息核對的工作量。

在功能開發時,如果當前鼠標未選中單元格集,則檢查當前鼠標所在單元格的列中的所有數字單元格的內容,如果選中了單元格集,則只判斷當前選中內容,實現方法的主要過程如下所示:

var cells = app.Selection.Range.Cells;

int count=cells.Count;

if (count == 1)

{

context = cells[k].Range.Text;

length = context.Length-2;

}

string context;

int length;

for (int k=1;k<=count;k++)

{

context = cells[k].Range.Text;

length = context.Length-2;

MessageBox.Show(length.ToString());

if (length != 11)

{

cells[k].Range.HighlightColorIndex = Word.WdColorIndex.wdRed;

}

}[6]

上文的方法檢測了手機號的長度是否為11,在開發檢查身份證信息功能時,可以在此基礎上進行功能擴展。

4 結束語

相比VBA,VSTO有了更多的開發選擇,在強大的Visual Studio開發環境下,可以向Office系列的應用程序增加和業務緊密相關的輔助性功能,也可以將應用程序二次開發為一個完整的桌面程序。

本文研究了VSTO在Word插件開發方面的應用,實現了標題序號檢查、正文格式檢查、重復內容檢查、表格數字信息檢查等功能,能夠在一定程度上減少文檔寫作的工作量。VSTO強大的功能還需要進一步研究,接下來的研究工作主要研究VSTO與數據庫的結合。

參考文獻:

[1] McGrath K. VSTO開發指南[M]. 李永倫,譯.北京: 機械工業出版社, 2009: 5-7.

[2] 張印. 基于VSTO的高校畢業論文格式化處理軟件的設計與實現[D]. 北京: 北京郵電大學, 2012.

[3] 張未未, 吳宇峰, 劉仁權, 等. 基于VSTO技術的Office計時器插件的設計與實現[J]. 電子設計工程, 2016(11): 31-34,37.

[4] Microsoft. the Word 2010 Primary Interop Reference[DB/OL].(2016-01-08).https://msdn.microsoft.com/en-us/library/ff597928(v=office.14).aspx.

[5] Goyvaerts, Steven Levithan.正則表達式經典實例[M]. 郭耀, 遲騁,譯. 北京: 人民郵電出版社, 2014: 25-28.

[6] 周順, 朱成彪, 辛皓煒. 一種基于VSTO的Office操作題自動評分算法[J]. 電子制作, 2015(8): 102-103.

猜你喜歡
插件
自編插件完善App Inventor與樂高機器人通信
基于OSGi的軍用指揮軟件插件機制研究
插件技術在計算機軟件技術中的運用
MapWindowGIS插件機制及應用
基于框架-插件架構的軍事仿真系統設計方法研究
基于Revit MEP的插件制作探討
插件虛擬機的設計與實現*
插件技術在計算機軟件中的應用分析
插件體系結構軟件的原理和實現
91香蕉高清国产线观看免费-97夜夜澡人人爽人人喊a-99久久久无码国产精品9-国产亚洲日韩欧美综合