天天看點

VSTO之旅系列(四):建立Word解決方案

 本專題概要

引言

Word對象模型

建立Word外接程式

小結

一、引言

  在上一個專題中主要為大家介紹如何自定義我們的Excel 界面的,然而在這個專題中,我将為大家介紹如何用VSTO來建立Word項目,對于Word的VSTO開發和Excel的開發很類似,你同樣也可以為Word自定義界面的,他們的差別主要在于對象模型的不同,隻要熟悉了Word的對象模型,操作Word也就很簡單了。下面首先就開始介紹Word的對象模型的。

二、Word對象模型

 建立Word解決方案和建立Excel解決方案之前都需要對他們的對象模型進行了解,因為隻有了解了他們中各對象的關系,才能更好處理Word和Excel的文檔,下面先給出一張Word對象模型層次結構圖:

VSTO之旅系列(四):建立Word解決方案

看上面朋友們肯定對個對象的關系是有所了解了,但是對于每個對象到底代表什麼意思還是不怎麼明白,下面就具體為大家介紹下每個對象所代表的意思.

Application對象代表Word應用程式,我們打開Word文檔就是開啟了一個Word應用程式,這裡需要注意的是——無論你打開幾個Word文檔,都是在一個Word程序裡進行管理的。它是所有對象的父級(從圖中也可以看出,每個對象都是它的子節點)。

在應用程式外接程式項目中(這個在Excel解決方案裡都有介紹,對于Word也存在應用程式外接程式項目和文檔級項目),我們可以通過下面的方式來獲得Application對象: Globals.ThisAddIn.Application

在文檔級别項目中,我們可以通過ThisDocument類的Application屬性來獲得Application對象,即代碼為: Word.Application app = Globals.ThisDocument.Application;

Document對象代表着一個Word文檔,即使你打開的是一個空文檔,也是有一個Document對象,在我們對Word文檔的内内容進行編輯,修改,删除,添加操作之前,我們都需要提前獲得該對象,獲得焦點的文檔我們稱為活動文檔,我們可以通過Application對象的ActiveDocument屬性來獲得目前活動的文檔,代碼為:

using Word = Microsoft.Office.Interop.Word; 

// 應用程式級項目中獲得文檔對象 

            Word.Document doc= Globals.ThisAddIn.Application.ActiveDocument; 

// 文檔級項目中獲得文檔對象 

            Word.Application app = Globals.ThisDocument.Application; 

            Word.Document doc = app.ActiveDocument; 

Selection對象代表目前選擇的區域。我們在對Word中内容進行某些操作的時候,例如,改變文本字型大小,此時我們就需要選中該文本,然後設定選中文本的字型大小,這樣選擇的文本就代表一個Selection對象,這裡需要注意的是——Selection對象是一直存在于文檔中的,因為有些朋友會問,如果我們沒有選中任何文本時,是否還有Selection對象呢?答案是肯定的,當我們沒有選擇任何文本時,插入點(即操作文本時都會有一個這個符号“|”,該符号就是代表一個插入點)即是一個Selection對象,并且所選的内容可以包含多個不連續的文本塊。

Range對象代表一個連續的區域,由一個開始字元位置和一個結束字元位置來确定。我們在文檔中定義多個Range對象,看到Range對象,朋友們就會聯想到Selection對象,他們都是代表區域,到底他們有什麼差別呢?對于他們的差別——Range對象在文檔中是不可見的,并且是連續的,而Selection對象是在文檔中可見的,且可以包含多個不連續的文本塊。通俗的說就是,例如,我們想對某些文本改變字型大小的操作,此時我們可以有兩種方式來實作:第一種,就是使用Selection對象來選中該文本再改變其樣式(此時選中的文本我們可以在Word文檔中可以看見,我們可以清楚的明白那些文本需要改變字型),第二種就是使用Range對象來指定一個開始字元(就是一個文字)位置和一個結束字元的位置,這樣在開始字元和結束字元之間就是一個Range對象,然後對該Range對象來設定它的字型樣式,但是這整個過程中我們是看不到那些文本被選中了,是以在應用樣式之前,我們是不知道那些文本會改變字型的,而是用Selection對象卻不同,即使在應用字型樣式之前,我們可以肉眼看出那些文本将會改變字型的。

Bookmark對象即書簽,在現實生活中,我們使用書簽是用來做标記的。同樣Word文檔中也有書簽這個功能,我們可以對Word做一個标記,讓你可以知道上次閱讀到哪裡了,Bookmark就是這樣的一個對象。書簽可以隐藏也可以變得可見,我們可以通過 View對象的ShowBookmarks屬性設定為true或false。

為了幫助更進一步了解這些對象,下面通過一張圖來表示各個對象在一個Word文檔中的對應關系:

VSTO之旅系列(四):建立Word解決方案

三、建立Word外接程式

建立完Word 2010外接程式之後,右鍵項目——>添加——>建立項,選擇功能區(可視化設計器),在名稱部分輸入:“ExportPDFRibbon.cs“;

VSTO之旅系列(四):建立Word解決方案

 點選工具箱,在”Office功能區控件"中拖入Menu控件,然後在Menu控件中插入兩個Button按鈕,分别命名為"PDF"和”XPS“

設計RibbonTab,因為上一專題中設計的Ribbon是一個獨立的頁籤,是以在本項目中,我不想建立獨立的Ribbon,想把Ribbon下的控件放在Home頁籤下,為了實作這個目的,必須把下圖中的幾個屬性設定下,具體屬性見下圖: 

VSTO之旅系列(四):建立Word解決方案

  4. 在ExportPDFRibbon.cs檔案的背景代碼(可以按F7來檢視後天代碼)中插入下面的實作代碼:

public partial class ExportPDFRibbon 

    { 

        private void ExportPDFRibbon_Load(object sender, RibbonUIEventArgs e) 

        { 

            // 為PDf和XPS按鈕注冊點選時間 

            btnRibbonPDF.Click += new RibbonControlEventHandler(ExportDocument); 

            btnRibbonXPS.Click += new RibbonControlEventHandler(ExportDocument); 

        } 

        // 導出檔案方法 

        private void ExportDocument(object sender, RibbonControlEventArgs e) 

            switch (e.Control.Id) 

            { 

                    // 判斷點選的按鈕ID 

                case "btnRibbonPDF": 

                    // 打開儲存檔案視窗 

                    using (SaveFileDialog saveFileDialog = new SaveFileDialog()) 

                    { 

                        // 設定儲存檔案視窗的相關屬性 

                        saveFileDialog.Filter = "All File(*.*)|*.*"; 

                        saveFileDialog.DefaultExt = ".pdf"; 

                        saveFileDialog.RestoreDirectory = true; 

                        // 在儲存檔案視窗中點選儲存按鈕 

                        if (saveFileDialog.ShowDialog() == DialogResult.OK) 

                        { 

                            // 導出為PDF格式 

                            Globals.ThisAddIn.Application.ActiveDocument.ExportAsFixedFormat( 

                                saveFileDialog.FileName, 

                                Microsoft.Office.Interop.Word.WdExportFormat.wdExportFormatPDF); 

                        } 

                    } 

                    break; 

                case "btnRibbonXPS": 

                    using (SaveFileDialog saveFileDialog2 = new SaveFileDialog()) 

                        saveFileDialog2.Filter = "All File(*.*)|*.*"; 

                        saveFileDialog2.DefaultExt = ".xps"; 

                        saveFileDialog2.RestoreDirectory = true; 

                        if (saveFileDialog2.ShowDialog() == DialogResult.OK) 

                            // 導出為XPS格式 

                                saveFileDialog2.FileName, 

                                Microsoft.Office.Interop.Word.WdExportFormat.wdExportFormatXPS); 

                default: 

                    return; 

            } 

    } 

通過上面的步驟就可以完成開始提出的需求:把Word文檔儲存為PDF或XPS檔案,具體運作結果為:

VSTO之旅系列(四):建立Word解決方案

點選PDF按鈕之後,會彈出另存為視窗,在彈出的視窗中輸入你想儲存的名稱,點選儲存按鈕之後,此時你可以在儲存的位置中看到儲存的檔案名。

VSTO之旅系列(四):建立Word解決方案

四、小結

  到這裡,本專題的内容就介紹完成了,本專題主要介紹了Word對象模型,通過對對象模型中各對象的使用來對Word文檔進行操作,關于對Word文檔更多的操作内容我會放在實作Office自動化專題中向大家介紹,最後實作了一個簡單的需求——把Word檔案轉換為PDF或xps檔案。希望通過本專題大家可以用VSTO技術來進行Word操作,然後在下一個專題中将為大家介紹下OutLook相關的内容。

<a href="http://down.51cto.com/data/2362396" target="_blank">附件:http://down.51cto.com/data/2362396</a>

     本文轉自LearningHard 51CTO部落格,原文連結:http://blog.51cto.com/learninghard/1150718,如需轉載請自行聯系原作者

繼續閱讀