共用方式為


撰寫 Office 方案中的程式碼

在 Office 專案中撰寫程式碼,在某些方面會與在 Visual Studio 中撰寫其他類型的專案不同。在這些差異中,有許多都是與將 Office 物件模型公開為 Managed 程式碼的方式有關。其他差異則是與 Office 專案的設計有關。

**適用於:**本主題中的資訊適用於 Office 2013 和 Office 2010 的文件層級專案和應用程式層級專案。如需詳細資訊,請參閱依 Office 應用程式和專案類型提供的功能

Managed 程式碼和 Office 程式設計

Automation 是建立整合式 Microsoft Office 方案的主要技術,也是元件物件模型 (Component Object Model,COM) 技術的一部分。Automation 可以讓您使用程式碼,建立及控制可由支援程式設計介面的任何應用程式、DLL 或 ActiveX 控制項所公開的軟體物件。

Bb608596.collapse_all(zh-tw,VS.110).gif了解主要 Interop 組件

Microsoft Office 應用程式將許多功能公開給 Automation。但是,您不能直接使用 Managed 程式碼 (例如 Visual Basic 或 C#) 自動化 Office 應用程式。若要使用 Managed 程式碼自動化 Office 應用程式,則必須使用 Office 主要 Interop 組件 (PIA)。主要 Interop 組件可讓 Managed 程式碼與 Office 應用程式的 COM 物件模型互動。

每一種 Microsoft Office 應用程式都有 PIA。當您在 Visual Studio 中建立 Office 專案時,會自動在專案中加入適當 PIA 的參考。若要自動化來自專案的其他 Office 應用程式功能,則必須手動加入適當 PIA 的參考。如需詳細資訊,請參閱HOW TO:透過主要 Interop 組件以 Office 應用程式為目標

Bb608596.collapse_all(zh-tw,VS.110).gif在設計階段和執行階段使用主要 Interop 組件

您必須在開發電腦的全域組件快取內安裝並註冊 Office PIA,才能執行大部分的開發工作。如需詳細資訊,請參閱設定電腦以開發 Office 方案

Office PIA 在使用者電腦上不需要執行以 .NET Framework 4 或 .NET Framework 4.5的 Office 方案。如需詳細資訊,請參閱設計和建立 Office 方案

Bb608596.collapse_all(zh-tw,VS.110).gif使用主要 Interop 組件中的型別

Office PIA 同時包含會公開 Office 應用程式物件模型的型別,以及其他不適合直接在程式碼中使用的基礎結構型別。如需 Office PIA 中的型別概觀,請參閱Overview of Classes and Interfaces in the Office Primary Interop Assemblies

因為 Office PIA 中的型別相當於 COM 物件模型中的型別,所以這些型別的使用方式通常會與其他 Managed 型別不同。例如,如果方法具有 Office 主要 Interop 組件中的選擇性參數,則其呼叫方式取決於您在專案中使用的程式語言。如需詳細資訊,請參閱下列主題:

Office 專案的程式撰寫模型

所有 Office 專案都會包括一種或多種產生的類別,而這些類別提供程式碼的進入點。這些類別也可以存取主應用程式的物件模型,以及存取動作窗格和自訂工作窗格這類功能。

Bb608596.collapse_all(zh-tw,VS.110).gif了解產生的類別

在 Excel 和 Word 的文件層級專案中,產生的類別會與應用程式之物件模型中的最上層物件類似。例如,Word 文件專案中之產生的 ThisDocument 類別與 Word 物件模型中的 Microsoft.Office.Interop.Word.Document 類別提供相同的成員。如需文件層級專案中產生之類別的詳細資訊,請參閱文件層級自訂程式設計

應用程式層級專案提供稱為 ThisAddIn 的產生的類別。這個類別與主應用程式之物件模型中的類別不同。這個類別代表增益集本身,而且提供的成員可用來存取主應用程式的物件模型,以及存取增益集可用的其他功能。如需詳細資訊,請參閱應用程式層級增益集程式設計

Office 專案中的所有產生的類型會包括 Startup 和 Shutdown 事件處理常式。在您開始撰寫程式碼時,一般會在這些事件處理常式中加入程式碼。若要初始化增益集,您可以將程式碼加入至 Startup 事件處理常式。若要清除增益集使用的資源,則可將程式碼加入至 Shutdown 事件處理常式。如需詳細資訊,請參閱Office 專案中的事件

Bb608596.collapse_all(zh-tw,VS.110).gif在執行階段存取產生的類別

載入 Office 方案時,Visual Studio Tools for Office Runtime 會具現化您專案中每個產生的類別。您可以使用 Globals 類別,從專案的任何程式碼中存取這些物件。例如,您可以使用 Globals 類別,從應用程式層級增益集中 [功能區] 按鈕的事件處理常式呼叫 ThisAddIn 類別中的程式碼。

如需詳細資訊,請參閱全域存取 Office 專案中的物件

Bb608596.collapse_all(zh-tw,VS.110).gif在 Office 方案中的命名空間的考量

建立 Office 專案之後,就不能變更此專案的「預設命名空間」(Default Namespace) (或 Visual Basic 中的「根命名空間」(Root Namespace))。預設命名空間一律會符合您在建立專案時指定的專案名稱。如果您將專案重新命名,預設命名空間不會變更。如需專案中預設命名空間的詳細資訊,請參閱專案設計工具、應用程式頁 (C#)專案設計工具、應用程式頁 (Visual Basic)

Bb608596.collapse_all(zh-tw,VS.110).gif變更 C# 專案中主項目類別的命名空間

在 Visual C# Office 專案中,主項目類別 (例如 ThisAddIn、ThisWorkbook 或 ThisDocument 類別) 有自己的命名空間。根據預設,專案中主項目的命名空間會符合您在建立專案時指定的專案名稱。

若要變更 Visual C# Office 專案中主項目的命名空間,請使用 [主項目命名空間] 屬性。如需詳細資訊,請參閱Office 專案中的屬性

在 Office Project 中支援的程式語言

Visual Studio 中的 Office 專案範本只支援 Visual Basic 和 Visual C# 程式設計語言。因此,這些專案範本只能從 Visual Studio 之 [新增專案] 對話方塊的 [Visual Basic] 和 [Visual C#] 節點下取得。如需詳細資訊,請參閱HOW TO:在 Visual Studio 中建立 Office 專案

語言選擇與 Office 程式設計

Microsoft Office 和 Visual Basic for Applications (VBA) 當初是以能夠彼此配搭為目的而開發的,因此可最佳化應用程式自訂作業的工作流程。Visual Basic 繼承了其中一些開發項目。例如,Visual Basic 支援選擇性 (Optional) 參數,也就是說,當您使用 Microsoft Office 主要 Interop 組件來呼叫某些方法時,需撰寫的程式碼會比您使用 Visual C# 所需撰寫的程式碼要來得少一些。

與 Visual Basic 的程式設計為. 在 Office 方案中的 Visual C#

您可以使用 Visual Basic 或 Visual C# 建立 Office 方案。因為 Microsoft Office 物件模型設計成與 Microsoft Visual Basic for Applications (VBA) 搭配使用,所以 Visual Basic 開發人員可以得心應手地使用 Microsoft Office 應用程式所公開的物件。在 Visual Studio 2012 中,Visual C# 開發人員可以使用的功能大部分都與 Visual Basic 開發人員相同,但是他們有時必須撰寫額外的程式碼以使用 Office 物件模型。在以 Visual Basic 與 C# 所撰寫的 Managed 程式碼和 Office 開發的基本程式設計功能之間也有一些差異。

Visual Basic 和 Visual C# 之間的主要差異。

下表顯示在 Office 開發中,Visual Basic 與 Visual C# 之間的主要差異。

功能

描述

Visual Basic 支援

Visual C# 支援

選擇性參數

在您呼叫方法時,許多 Microsoft Office 方法都會有不必要的參數。如果未傳遞參數值,則會使用預設值。

Visual Basic 支援選擇性參數。

在大部分情況下,Visual C# 都支援選擇性參數。如需詳細資訊,請參閱Office 方案中的選擇性參數

以傳址 (By Reference) 方式傳遞參數

大部分 Microsoft Office 主要 Interop 組件中的選擇性參數都可以用傳值 (By Value) 方式傳遞。然而,在部分主要 Interop 組件中,接受參考型別 (Reference Type) 的選擇性參數都必須以傳址方式傳遞。

如需實值和參考型別參數的詳細資訊,請參閱以傳值和傳址方式傳遞引數 (Visual Basic) (適用於 Visual Basic) 和傳遞參數 (C# 程式設計手冊)

以傳址方式傳遞參數無需額外工作。Visual Basic 編譯器會在需要時以傳址方式自動傳遞參數。

在大部分情況下,Visual C# 編譯器會在需要時以傳址方式自動傳遞參數。如需詳細資訊,請參閱Office 方案中的選擇性參數

參數型屬性

部分屬性會接受參數,方式如同唯讀功能。

Visual Basic 支援接受參數的屬性。

Visual C# 支援接受參數的屬性。

晚期繫結

晚期繫結包含判斷物件在執行階段時的屬性,而不是在設計階段將變數轉換為 (Cast) 物件型別。

當 Option Strict關閉時, Visual Basic 執行晚期繫結。開啟 Option Strict 時,您必須明確轉換物件,並使用 System.Reflection 命名空間中的型別來存取晚期繫結的成員。如需詳細資訊,請參閱Office 方案中的晚期繫結

Visual C# 會在目標為 .NET Framework 4 的專案中執行晚期繫結。如需詳細資訊,請參閱Office 方案中的晚期繫結

Office 開發與 Managed 程式碼之間的主要差異

下表顯示 Office 開發與以 Visual Basic 或 Visual C# 所撰寫的 Managed 程式碼之間的主要差異。

功能

描述

Visual Basic 與 Visual C# 支援

陣列索引

集合的陣列下限列界限 Microsoft Office 應用程式中從 1. 開始。Visual Basic 和 Visual C# 則使用以 0 起始的陣列。如需詳細資訊,請參閱陣列 (C# 程式設計手冊)Visual Basic 中的陣列

若要在 Microsoft Office 應用程式的物件模型中,存取集合的第一個項目,請使用索引 1,而不要使用 0。

請參閱

工作

HOW TO:透過主要 Interop 組件以 Office 應用程式為目標

HOW TO:在 Office 專案中建立事件處理常式

概念

Office 方案中的選擇性參數

全域存取 Office 專案中的物件

Office 專案中的事件

Office 方案中的晚期繫結

Office 方案的共同開發