共用方式為


主機項目和主機控制項概觀

主機項目和主機控制項是提供 Office 解決方案程式設計模型的類型,這些解決方案是透過 Visual Studio 中的 Office 開發工具建立的。 主機項目和主機控制項可與以 COM 為基礎的 Microsoft Office Word 和 Microsoft Office Excel 的物件模型互動,更像是與 Windows Forms 控制項等受控物件互動。

適用於: 本主題中的資訊適用於 Excel 和 Word 的文件層級專案和 VSTO 增益集專案。 如需詳細資訊,請參閱 Office 應用程式和專案類型所提供的功能

主機相關項目

在 Office 專案中,主物件是物件模型階層頂端的類型。 Visual Studio Tools for Office 執行階段會定義下列 Word 和 Excel 解決方案的主機專案:

  • Document

  • Workbook

  • Worksheet

  • ChartSheet

    這些類型中的每一個都會擴充原生存在於 Word 或 Excel 物件模型中的物件,稱為 原生 Office 物件。 例如,Document 主機專案擴充 Document 物件,這是在 Word 的主要互通組件中定義的。

    主機項目通常具有與對應 Office 物件相同的基本功能,但會透過下列功能進行增強:

  • 裝載受控控制項的能力,包括主機控制項和 Windows Forms 控制項。

  • 更豐富的事件模型。 原生 Word 和 Excel 物件模型中的某些文件、活頁簿和工作表事件只會在應用程式層級引發。 主機項目會在文件層級提供這些事件,以便更輕鬆地處理特定文件的事件。

瞭解文件層級專案中的主機物件

在文件層級專案中,宿主項目提供程式碼的進入點,並具有協助您開發解決方案的設計工具。

DocumentWorksheet 主機項目具有相關聯的設計工具,這些設計工具像 Windows Forms 設計工具一樣,是文件或工作表的視覺化呈現。 您可以使用此設計工具直接在 Word 或 Excel 中修改文件或工作表的內容,以及將控制項拖曳到設計介面上。 如需詳細資訊,請參閱 文件主機項目工作表主機項目

Workbook主機專案不會作為具有使用者介面之控制項的容器。 反之,此宿主項目的設計工具作為元件匣,使您可以將元件(例如DataSet)拖曳到其設計介面上。 如需詳細資訊,請參閱 活頁簿主機項目

無法在文件層級專案中以程式設計方式建立主項目。 相反地,請使用 ThisDocumentVisual Studio 在設計階段在專案中自動產生的 、 ThisWorkbookSheetn 類別。 這些產生的類別衍生自主機項目,並提供程式碼的入口點。 如需詳細資訊,請參閱 主機專案和主機控制項的程式設計限制

瞭解 VSTO 增益集專案中的宿主項目

當您建立 VSTO 增益集時,預設您無法存取任何主機項目。 不過,您可以在運行時於 Word 和 Excel 的 VSTO 增益集中產生DocumentWorkbookWorksheet主機項目。

產生主項目之後,您可以執行工作,例如將控制項新增至文件。 如需詳細資訊,請參閱 在執行時間於 VSTO 外掛程式中擴充 Word 文件和 Excel 活頁簿

主機控制項

主機控制項會擴充 Word 和 Excel 物件模型中的各種使用者介面 (UI) 物件,例如 Microsoft.Office.Interop.Word.ContentControlRange 物件。

下列主機控制項可用於 Excel 專案:

備註

不支援將主機控制項或 Windows Forms 控制項新增至 Word 子文件。

將主機控制項新增至您的文件

在文件層級專案中,您可以透過下列方式,在設計階段將主機控制項新增至 Word 文件或 Excel 工作表:

命名主機控制項

當您將主機控制項從 [工具箱] 拖曳到文件時,控制項會自動使用控制項類型命名,並在結尾加上增量數字。 例如,書籤的名稱為 bookmark1bookmark2 等。 如果您使用 Word 或 Excel 的原生功能來新增控制項,您可以在建立控制項時為其指定特定名稱。 您也可以變更 [屬性] 視窗中 [名稱] 屬性的值,以重新命名控制項。

備註

您無法使用保留字來命名主機控制項。 例如,如果您將控制項新增至 NamedRange 工作表,並將名稱變更為 System,則建置專案時會發生錯誤。

刪除主機控制項

在文件層級專案中,您可以在設計階段刪除主機控制項,方法是選取 Excel 工作表或 Word 文件上的控制項,然後按 Delete 鍵。 不過,您必須使用 Excel 中的 [定義名稱 ] 對話方塊來刪除 NamedRange 控制項。

如果您在設計階段將主機控制項新增至檔,則不應該在執行階段以程式設計方式移除它,因為下次您嘗試在程式碼中使用控制項時,會擲回例外狀況。 Delete主機控制項的方法只會移除在執行階段新增至檔的主機控制項。 如果您呼叫 Delete 在設計階段建立之主機控制項的方法,則會擲回例外狀況。

例如,只有當NamedRange是以程式設計方式新增至工作表的,Delete方法才會成功刪除NamedRange,這稱為動態建立主機控制項。 動態建立的主機控制項也可以藉由將控制項名稱傳遞至 Remove 方法或 ControlsControls 屬性來移除。 如需詳細資訊,請參閱 在執行階段將控制項新增至 Office 文件

如果使用者在執行階段從文件中刪除主機控制項,則解決方案可能會以非預期的方式失敗。 您可以使用 Word 和 Excel 中的文件保護功能來保護主機控制項不被刪除。 如需詳細資訊,請參閱 Office 開發範例和逐步解說

備註

請勿在文件或工作表的Shutdown事件處理時以程式方式移除控制項。 事件發生時,Shutdown UI 元素不再可用。 如果您想要在應用程式關閉之前移除控制項,請將程式碼新增至另一個事件處理常式,例如 BeforeCloseBeforeSave

用於處理主機控制事件的程式

主機控制項擴充 Office 物件的其中一種方式是新增事件。 例如, Range Excel 中的物件和 Bookmark Word 中的物件沒有事件,但 Visual Studio Tools for Office 執行階段會藉由新增可程式化事件來擴充這些物件。 您可以存取這些事件並針對這些事件進行編碼,就像存取 Windows Forms 上的控制項事件一樣:透過 Visual Basic 中的事件下拉式清單和 C# 中的事件屬性頁。 如需詳細資訊,請參閱 逐步解說:針對 NamedRange 控制項的事件進行程式設計

備註

您不應該將 EnableEvents Excel 中物件的 Application 屬性設定為 false。 將此屬性設定為 false 可防止 Excel 引發任何事件,包括主機控制項的事件。