我的VSTO之路 三 Word基本知識

2022-01-14 10:28:06 字數 3226 閱讀 7919

自定義ribbon

自定義task pane

vsto外掛程式中獲取word內容全文

修改word內容和樣式

其中關於如何建立ribbon和task pane的內容,我已經在前一篇文章中介紹了,如果你還不熟悉,可以看這裡。

word object model 介紹

我來依次介紹這幾個物件:

document 物件

range 物件

range是乙個比較特殊的物件(我其實都不知道如何用中文翻譯貼切地翻譯這個單詞),在你日常使用word的過程中,你甚至可能不會知道有這樣乙個物件存在,但如果你想通過程式方式修改word正文的內容,range是乙個很關鍵的物件。用微軟官方的表述,range代表著文件中一片連續的區域,微軟為它列出了一下幾個特性:

range的組成成分可以是單獨的插入點,也可以是乙個文字範圍或整個文件。

range包含非列印字元,例如空格、製表符和段落標記。

range可以是當前所選內容所表示的區域,也可以表示當前所選內容之外的區域。

range與始終可見的所選內容不同,它在文件中是不可見的。

range不隨文件儲存,僅存在於**執行期間。

我再為它加2條

range有明確的開始和結束,但不同的range之間是可以有交集的

range的長度是在變化的,如果你往乙個range裡面插入的乙個單詞,它的長度會自動變長。

獲得range物件的方式很多,我們可以通過document物件的range(ref object start = type.missing, ref object end = type.missing)方法,建立乙個自定義的range。通過word中文件相關的物件都有乙個range屬性,比如paragraph.range、selection.range。

selection 物件

1:  

//

2:  

// summary:

3:  

// occurs when the selection changes in the active document window.

4:  

delegate介面

1: [typelibtype(16)]

2:      [comvisible(false)]
3:  

public

delegate

bookmark 與 content control

bookmark即書籤,在word文件中做乙個標記,方便查閱。開發過程中,我們可以基於range來建立bookmark。如:

1:

// 將第一段文件標記為乙個bookmark

3:      range.bookmarks.add("justintest");
外掛程式:自定義search面板

我先定義一下我們要實現的功能點,獲得word文件的內容,取得與檢索關鍵字相關的上下文並顯示在listview中,當使用者點中listview中的專案時,高亮顯示word文件中對應的內容。以下是如何實現這幾個功能的介紹。

獲得word的全文

要取得當前word的全文,我們主要要解決兩個問題。

如何獲得當前的document物件?

如何通過document物件獲得文件內容?

對於第二個問題,我們有兩個方法:首先,document物件有paragraphs集合,這個集合裡面包含了每個段落的物件,而每個段落物件,都有range屬性,我們可以通過paragraph.range.text,來獲得每個段落的正文。其次document物件有乙個range方法,通過它我們可以把整個document作為乙個range。

search按鈕**

1:  

private

void btnsearch_click(object sender, eventargs e)

2:
11:
12:  

// 按段落檢索

14:  

if (currentdocument.paragraphs != null &&

15:                  currentdocument.paragraphs.count != 0)
16:
44:  

catch (exception ex)

45:
48:                          }
49:                      }
50:                  }
51:              }
52:          }
介紹一下這段**的幾個功能點:

在search功能開始時,先清除文件中的高亮顯示(clearmark方法稍後會介紹)。

分段落,依次查詢關鍵字。

獲得關鍵字的上下文,並放入listview中顯示。需要注意的時候,我在listviewitem的tag物件裡面,存入了keyword在文件中的range,為了listview點選事件。

listview點選事件

1:  

private

void lvsearchresult_itemselectionchanged(object sender, listviewitemselectionchangedeventargs e)

2:
13:          }
其他方法

1:  

private

void clearmark()

2:
7:          }
我在search事件和listview點選方法中都會先呼叫這個方法,它會使用在lvsearchresult_itemselectionchanged中儲存的range和color,來恢復之前的樣式。

總結

修改右鍵選單

往文件中插入內容

新增超連結、書籤

基於選中內容,顯示懸浮框

接觸vsto,開發word外掛程式的利器

研究word外掛程式有一段時間了,現在該是總結的時候了。首先咱們來了解下什麼是vsto?所謂vsto,就是vs面向office提供的乙個開發平台。乙個開發平台至少包含兩個要素 開發工具 sdk 和執行環境 runtime 那麼我們先搭建開發環境,我用的是vs2010,選擇的.netframework...

我的創新成長之路(三)

轉眼就大二下學期了,這一年是我鍛鍊的一年,這一學年中的大部分課餘時間我都會呆在創新,當然那時還經常陪伴著現在已經不屬於我的她。記得大概是剛過完大年初十自己就整理行囊趕往學校,火車票不好買,還是我姑父託人把我跟乙個朋友送上火車的。這次坐火車至今刻苦銘心,因為沒有臥鋪,沒有坐票,我們兩個就擠在餐車的乙個...

2014 我的求職之路(三)

3 簡歷的製作 簡歷是求職過程中必不可少的東西,乙份簡潔 規範 合適的簡歷可以讓面試官對你產生良好的印象,因此,這裡千萬不能麻痺大意。共享我的簡歷給大家參考參考,不足之處請大家批評指正 簡歷可以有很多形式,我看過的簡歷也是千差萬別,而且有的是兩頁有的是一頁,自己也曾經對此充滿疑問 簡歷到底是一頁好呢...