使用 Microsoft Visual C# 進行 Microsoft Word 2002 和 Excel 2002 編程(一)

來源:互聯網
上載者:User
excel|visual|word|編程 使用 Microsoft Visual C# 進行 Microsoft Word 2002 和 Excel 2002 編程
Kerry Loynd 和 Siew-Moi Khor
Microsoft Corporation
2002年10月
適用於:
    Microsoft® Office XP
    Microsoft Visual C#™
摘要:瞭解 Microsoft C# 和大型複雜的 COM 伺服器之間的 COM Interop性。本文介紹了如何準備 Office XP COM 物件以及如何在 C# 程式中使用這些對象,同時還提供了一些提示,協助您理解為何某些操作必須通過特定方法才能實現。
在 MSDN Downloads(英文)下載或瀏覽 odc_offcs.exe。

目錄

  • 簡介
  • 系統要求
  • .NET 的一些快速入門知識
  • 使用 Office XP 主要 Interop 組件
  • 代碼演練
    • 樣本 1:啟動 Word Application 對象
    • 樣本 2:建立新 Word 文檔
    • 樣本 3:開啟現有的 Word 文檔
    • 樣本 4:使用 Word 公開的事件
    • 樣本 5:動畫顯示 Office 助手
    • 樣本 6:預設屬性和索引屬性
  • 小結
簡介
Microsoft® Office XP 最強大的功能之一,就是其組件(例如 Microsoft Excel 2002 和 Microsoft Word 2002)以元件物件模型 (COM) 介面的形式公開其功能。通過 Microsoft Visual Basic® 6.0 訪問這些 COM 介面要相對容易些,但要通過 C 或 C++ 來使用這些介面和公用類,則會比較困難。然而,擁有託管擴充的 Microsoft .NET 和 Microsoft C#™ 或 Microsoft Visual C++® 卻能夠象 Visual Basic 6.0 一樣,輕鬆地使用 Office XP 公開的 COM 物件。
本文假定您要進行 Office XP 編程。儘管本文通篇提供了 MSDN® 文檔的超連結,但要掌握本文介紹的內容,您應該已經熟悉或者能夠訪問 Office XP 編程文檔。
該文檔介紹了 Office XP 提供的介面和公用類及其使用方法。文檔內容以 Visual Basic 程式設計語言形式表達,因此您需要在頭腦中對其中的方法和事件簽名進行轉換。本文將介紹如何進行這種轉換,如何準備 Office XP 的 COM 物件,以及如何在 C# 程式中使用這些 COM 物件。最後,本文還提供了一些提示,協助您理解為何某些操作必須通過特定方法才能實現。通過此資訊,您就應能夠利用其他使用 C# 的 COM 伺服器。 系統要求
要運行樣本,電腦上需要安裝以下軟體:
  • Microsoft Windows® XP 或 Microsoft Windows 2000 及相關的 Service Pack (SP)
  • Microsoft Office XP 及相關的 SP
  • Microsoft .NET Framework(英文)及相關的 SP
  • Microsoft Office XP Primary Interop Assemblies (PIA)(英文)
  • Microsoft Visual Studio® .NET
.NET 的一些快速入門知識
.NET 技術引入了程式集的概念,並將其作為基本的可執行單元。程式集可以是可執行檔 (.exe) 或動態連結程式庫 (.dll),並可以包含多個檔案。程式集包含有關運行程式所需的代碼、類型和資源的全部資訊。
要使用 Office XP 公開的 COM 物件,需要使用主要 Interop 組件 (PIA),這樣 C# 編譯器就能夠找到 Office XP 公開的介面和公用類。
有關Interop 組件或 PIA 方面的內容,本文將不做詳細介紹。有關 PIA 的詳細資料,請參閱 Primary Interop Assemblies (PIA)(英文)。本文的使用 Office XP 主要 Interop 組件一節提供了 Office XP PIA 的下載地址。
瞭解一下已公開的類型資訊通常會給您一些啟示。Microsoft Visual Studio® .NET 提供了一個稱作 ILDASM 的工具,用於列出封裝在程式集中的類型資訊。圖 1 是 ILDASM 顯示 Word 2002 主互通性程式集資訊的部分螢幕快照。
注意:要開啟 ILDASM 工具,請單擊“開始”,指向“程式”,指向“Microsoft Visual Studio .NET”,然後指向 Visual Studio .NET Tools(Visual Studio .NET 工具)並單擊 Visual Studio .NET Command Prompt(Visual Studio .NET 命令提示)。在 Visual Studio .NET Command Prompt(Visual Studio .NET 命令提示)視窗中,鍵入 ildasm。ILDASM 視窗隨後開啟。要查看某一特定Interop 組件或 PIA 的類型資訊,在 File(檔案)菜單中,單擊 Open(開啟)。瀏覽到Interop 組件或 PIA 的所在位置,選擇要查看的Interop 組件或 PIA 並單擊 Open(開啟)。


圖 1:使用 ILDASM 工具查看Interop 組件的類型資訊
圖 1 所示,程式集位於 Microsoft.Office.Interop.Word.dll 中,而介面和公用類則封裝在 Microsoft.Office.Interop.Word 命名空間中。 Application 公用類已經展開,這樣就可以看到,它擴充(按照 C++ 和 C# 用語,為派生)了 Application,並且在 Word 中實現了 ApplicationEvents2_Event 介面。所有這些內容都將在本文後續部分進行詳細討論。 使用 Office XP 主要 Interop 組件
在運行本文包含的樣本之前,應該在電腦上安裝 Microsoft Office XP Primary Interop Assemblies (PIAs)(英文)。安裝完 PIA 後必須將其置於編譯器和已完成程式可以訪問的位置。有關詳細資料,請參閱 Office XP PIA 下載文檔中包含的讀我檔案和“.NET Framework Developer's Guide”(要閱讀它,請單擊“開始”,指向“程式”,然後指向 Microsoft .NET Framework SDK 並單擊 Documentation [文檔])中的“Assembly Location”一文。
本文出於示範目的,將 Office XP PIA 解壓縮到以下檔案夾:C:\Office XP PIAs\。然後將其安裝到全域組件快取 (GAC) 並進行註冊(有關該操作的詳細資料,請參閱 Microsoft Office XP Primary Interop Assemblies (PIA) [英文] 的讀我檔案)。
可通過在命令列鍵入 C# 編譯器的可執行檔名稱 (csc.exe) 來調用此編譯器。安裝並註冊 PIA 後,便可使用 /r 選項,象引用其他任何程式集一樣在 csc 命令列上對其進行引用。如果 PIA 的位置無法訪問,程式將在運行時失敗,並產生一個 System.IO.FileNotFoundExceptionSystem.TypeInitializationException 類型的異常,告知哪個程式集無法載入。
接下來在“如何編譯和運行 example1.cs”一節中,將會介紹如何使用命令列產生 C# 程式和引用 PIA。
本文包含的樣本使用三個 Office XP PIA:
  • Microsoft.Office.Interop.Word.dll
  • Office.dll
  • Microsoft.Office.Interop.Excel.dll
代碼演練
示範程式碼範例之前,首先應下載 odc_offcs.exe 檔並將樣本程式解壓縮到 C:\CSOfficeSamples 或您選擇的目錄中。為便於引用,在下面的所有樣本中,都假定樣本程式位於 C:\CSOfficeSamples 目錄中。
下載文檔包含五個 Word 2002 樣本程式(example1.cs、example2.cs、example3.cs、example4.cs 和 example5.cs)和一個 Excel 2002 樣本程式 (excel1.cs)。樣本源檔案的相應樣本組建檔案(example1.exe、example2.exe 等)也一併包含在其中,供讀者使用。
所有程式碼範例都作了詳細注釋。

樣本 1:啟動 Word Application 對象


第一個樣本非常簡單,只顯示如何啟動 Word 2002,並使其在幾秒內保持開啟狀態,然後再將其關閉。首先看一看 example1.cs 源檔案中的主要程式碼。下面的程式碼片段分配 Application 對象和它的基類對象,但實際上是進行 CoCreateInstance 調用。
Application app = new Application();

Application 類的 Quit 方法接受三個參數:saveChanges、originalFormat 和 routeDocument。這些選擇性參數可在 Visual Basic 代碼中省略,而 C# 中則沒有選擇性參數;所有這三個參數都必須在調用時傳遞給 Quit。在 C# 中可通過將值 Missing.Value 賦給每個可選變數(用於通知 Quit 方法使用預設行為)可獲得同樣效果。在本樣本中,即表示“不儲存文檔,保留文檔的初始格式,並且不進行路由選擇”。
object saveChanges = Missing.Value;object originalFormat = Missing.Value;object routeDocument = Missing.Value;app.Quit(ref saveChanges, ref originalFormat, ref routeDocument);

請注意,所有這三個參數都標有 ref 關鍵字。由於這些方法最初是用 Visual Basic 編寫的,而預設情況下 Visual Basic 按引用來傳遞參數。因此,此處也必須按引用來傳遞參數。

如何產生和運行 example1.cs


要運行該樣本,首先要產生 examle1.cs 樣本。要在 Visual Studio .NET Command Prompt(Visual Studio .NET 命令提示)視窗中產生該樣本:
  1. 轉到 C:\CSOfficeSamples 目錄或儲存該樣本的任何目錄。如圖 2 所示,在命令提示後鍵入 cd C:\CSOfficeSamples 即可。
  2. 然後,在圖 2 所示的命令提示後鍵入 csc /r:"C:\Office XP PIAs\Microsoft.Office.Interop.Word.dll" example1.cs 產生 example1.cs。
    (如果 Office XP PIA 儲存在其他位置,則需要使用相應值替換下面的“磁碟機”和“安裝路徑”:csc /r:磁碟機:\<安裝路徑>\Microsoft.Office.Interop.Word.dll example1.cs。)
    注意:命令列 csc 對 example1.c s 源檔案進行編譯,產生 example1.exe 可執行檔。在本樣本中,所建立的可執行檔將自動儲存在 example1.cs 所在的同一檔案夾中。
    命令列選項 /r 將引用 Microsoft.Office.Interop.Word.dll。如果 Microsoft.Office.Interop.Word.dll PIA(或引用的任何 PIA)所在位置的路徑出現錯誤,程式將在運行時失敗,並產生一個 System.IO.FileNotFoundExceptionSystem.TypeInitializationException 類型的異常,告知哪個組件無法載入。


    圖 2:使用命令列產生源檔案
  3. 要運行 example1.exe(與 example1.cs 源檔案位於同一檔案夾中),雙擊該程式即可。

該樣本是一個非常簡單的程式,並不具備任何讓人感興趣的功能,現在讓我們看一看樣本 2。

樣本 2:建立新 Word 文檔


example2.cs 與樣本 1 一樣,也是使用 Application 對象啟動 Word 2002,然後在開啟文檔的集合(該集合封裝在 Application.Documents 屬性中)中添加一個新文檔。第一個有意義的代碼片斷在建立新文檔時出現的:
object template=Missing.Value;object newTemplate=Missing.Value;object documentType=Missing.Value;object visible=true;    _Document doc = app.Documents.Add( ref template,                       ref newTemplate,                       ref documentType,                       ref visible);

Add 方法的所有參數都是可選的,因此必須給這些參數指定一個有意義的值或是指定 Missing.Value。在該樣本中,由於我們不需要使用或建立模板,並且這隻是一個純文字文檔,因此將前三個參數(template、newTemplate 和 documentType)設定為 Missing.Value。由於希望此文檔在本樣本中可見,因此將參數 visible 設定為“true”。
您可能會對如何確定是否應將 Boolean 值賦給 visible 對象感到不解。這就是為什麼訪問 Word 2002 編程文檔很重要的原因所在了。如果看一看 Word 2002 物件模型文檔中有關 Documents.Add 方法的說明,您會看到以下內容:
Visible 可選的 Variant。設定為 True 將在可見視窗中開啟文檔。如果該值為 False,Microsoft Word 將開啟文檔,但將文件視窗的 Visible 屬性設定為 False。預設值為 True
注意:要查看 Word 2002 Visual Basic 文檔中的 Documents.Add 方法,可以在 Word 2002 的“工具”菜單中,選擇“宏”,然後單擊“Visual Basic 編輯器”。處於“Visual Basic 編輯器”的鍵盤狀態下時,按 F2 鍵啟用“物件瀏覽器”或按 F1 鍵查看“協助”。然後搜尋“Documents”或“Documents.Add”。在 MSDN 上也可以找到類似文檔。

這樣做迴避了一個問題:為什麼 PIA 期望 Add 方法的參數類型為 object,而 Documents.Add 方法文檔卻顯示類型 Variant?這是因為 Variant 類型被自動封送處理為 .NET Object 物件類型,後者映射為 C# 的 object 類型。在本樣本中,參數 visible 將 Booleantrue 封裝成 object,並將其傳遞給 Documents.Add() 函數。
下一行重要代碼是:
doc.Words.First.InsertBefore

使用從 app.Documents.Add() 函數調用返回的文檔介面,在文檔開始處添加了一些文本。此處沒有特別之處。
下面再來看下一段比較讓人感興趣的代碼片斷,其作用是儲存文檔:
object fileName = Environment.CurrentDirectory+"\\example2_new";#if OFFICEXPdoc.SaveAs2000( ref fileName,#elsedoc.SaveAs ( ref fileName,#endif       ref optional,       ref optional,       ref optional,       ref optional,       ref optional,       ref optional,       ref optional,       ref optional,       ref optional,       ref optional);

首先要注意的一件事就是,儲存檔案名稱的字串被封裝到 fileName 對象中。其次,此代碼將在定義了 OFFICEXP 的情況下調用 SaveAs2000 方法,而在未定義 OFFICEXP 的情況下調用 SaveAs 方法。或許您已經猜到, SaveAs 方法簽名在 Office 2000 和 Office XP 之間存在差別。

如何產生和運行 example2.cs


要產生 xample2.cs,可以在 Visual Studio .NET Command Prompt(Visual Studio .NET 命令提示)視窗中執行以下操作:
  1. 在 C:\CSOfficeSamples 目錄或任何儲存 example2.cs 的目錄中,在如圖 3 所示的命令提示後鍵入 csc /r:"C:\Office XP PIAs\Microsoft.Office.Interop.Word.dll" /d:OFFICEXP example2.cs
    (如果 Office XP PIA 儲存在其他位置,則需要使用相應值替換下面的“磁碟機”和“安裝路徑”:csc /r:磁碟機:\<安裝路徑>\Microsoft.Office.Interop.Word.dll /d:OFFICEXP example2.cs。)

    圖 3:使用命令列編譯 example2.cs(單擊圖片查看大映像)
  2. 要運行 example2.exe(與 example2.cs 源檔案位於同一檔案夾中),雙擊該程式即可。

樣本 3:開啟現有的 Word 文檔



相關文章

E-Commerce Solutions

Leverage the same tools powering the Alibaba Ecosystem

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。