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


本專題概要

  • 引言
  • Word對象模型
  • 創建Word外接程序
  • 小結

 

一、引言

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

二、Word對象模型

 創建Word解決方案和創建Excel解決方案之前都需要對他們的對象模型進行了解,因為只有了解了他們中各對象的關系,才能更好處理Word和Excel的文檔,下面先給出一張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屬性設置為truefalse

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

三、創建Word外接程序

  上面已經介紹了Word對象中主要幾個對象,在我們對Word文檔進行操作的時候都是使用這些主要的對象來進行操作的,對於如何更好的掌握這些對象的使用?方法就是多寫程序來練習了。下面就實現一個常見的需求的——把Word文檔轉換為PDf或xps文件。這里對於如何創建外接項目的過程就不介紹,具體的操作步驟和創建Excel解決方案是一樣,只是選擇的模板不一樣,Excel中選擇的是Excel 2010 外接程序模板,Word就自然選擇的是Word 2010外接程序模板了。下面具體介紹實現該需求的過程:

  1. 創建完Word 2010外接程序之后,右鍵項目——>添加——>新建項,選擇功能區(可視化設計器),在名稱部分輸入:“ExportPDFRibbon.cs“;
  2.  點擊工具箱,在”Office功能區控件"中拖入Menu控件,然后在Menu控件中插入兩個Button按鈕,分別命名為"PDF"和”XPS“
  3. 設計RibbonTab,因為上一專題中設計的Ribbon是一個獨立的選項卡,所以在本項目中,我不想創建獨立的Ribbon,想把Ribbon下的控件放在Home選項卡下,為了實現這個目的,必須把下圖中的幾個屬性設置下,具體屬性見下圖: 

  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格式
                            Globals.ThisAddIn.Application.ActiveDocument.ExportAsFixedFormat(
                                saveFileDialog2.FileName,
                                Microsoft.Office.Interop.Word.WdExportFormat.wdExportFormatXPS);
                        }
                    }
                    break;
                default:
                    return;
            }
        }
    }

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

點擊PDF按鈕之后,會彈出另存為窗口,在彈出的窗口中輸入你想保存的名稱,點擊保存按鈕之后,此時你可以在保存的位置中看到保存的文件名。

 

四、小結

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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM