主機項目和主機控制項是提供 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 解決方案的主機專案:
-
這些類型中的每一個都會擴充原生存在於 Word 或 Excel 物件模型中的物件,稱為 原生 Office 物件。 例如,Document 主機專案擴充 Document 物件,這是在 Word 的主要互通組件中定義的。
主機項目通常具有與對應 Office 物件相同的基本功能,但會透過下列功能進行增強:
裝載受控控制項的能力,包括主機控制項和 Windows Forms 控制項。
更豐富的事件模型。 原生 Word 和 Excel 物件模型中的某些文件、活頁簿和工作表事件只會在應用程式層級引發。 主機項目會在文件層級提供這些事件,以便更輕鬆地處理特定文件的事件。
瞭解文件層級專案中的主機物件
在文件層級專案中,宿主項目提供程式碼的進入點,並具有協助您開發解決方案的設計工具。
Document和 Worksheet 主機項目具有相關聯的設計工具,這些設計工具像 Windows Forms 設計工具一樣,是文件或工作表的視覺化呈現。 您可以使用此設計工具直接在 Word 或 Excel 中修改文件或工作表的內容,以及將控制項拖曳到設計介面上。 如需詳細資訊,請參閱 文件主機項目 和 工作表主機項目。
Workbook主機專案不會作為具有使用者介面之控制項的容器。 反之,此宿主項目的設計工具作為元件匣,使您可以將元件(例如DataSet)拖曳到其設計介面上。 如需詳細資訊,請參閱 活頁簿主機項目。
無法在文件層級專案中以程式設計方式建立主項目。 相反地,請使用 ThisDocumentVisual Studio 在設計階段在專案中自動產生的 、 ThisWorkbook或 Sheetn 類別。 這些產生的類別衍生自主機項目,並提供程式碼的入口點。 如需詳細資訊,請參閱 主機專案和主機控制項的程式設計限制。
瞭解 VSTO 增益集專案中的宿主項目
當您建立 VSTO 增益集時,預設您無法存取任何主機項目。 不過,您可以在運行時於 Word 和 Excel 的 VSTO 增益集中產生Document、Workbook和Worksheet主機項目。
產生主項目之後,您可以執行工作,例如將控制項新增至文件。 如需詳細資訊,請參閱 在執行時間於 VSTO 外掛程式中擴充 Word 文件和 Excel 活頁簿。
主機控制項
主機控制項會擴充 Word 和 Excel 物件模型中的各種使用者介面 (UI) 物件,例如 Microsoft.Office.Interop.Word.ContentControl 和 Range 物件。
下列主機控制項可用於 Excel 專案:
-
下列主機控制項可用於 Word 專案:
-
新增至 Office 檔的主機控制項的行為類似於原生 Office 物件;不過,主機控制項具有其他功能,包括事件和資料繫結功能。 例如,當您想要在 Excel 中擷取原生 Range 物件的事件時,必須先處理工作表的變更事件。 然後,您必須判斷變更是否發生在Range中。 相反地,NamedRange 主機控制項有一個您可以直接處理的 Change 事件。
主機項目與主機控制項之間的關聯性類似於 Windows 表單與 Windows Forms 控制項之間的關聯性。 就像您在 Windows 表單上放置文字方塊控制項一樣,您也可以在主機項目上放置一個NamedRange 控制項Worksheet。 下圖顯示主機專案與主機控制項之間的關聯性。
您也可以在 Office 解決方案中使用 Windows Forms 控制項,方法是將它們直接新增至 Word 和 Excel 文件介面。 如需詳細資訊,請參閱 Office 文件上的 Windows Forms 控制項概觀。
備註
不支援將主機控制項或 Windows Forms 控制項新增至 Word 子文件。
將主機控制項新增至您的文件
在文件層級專案中,您可以透過下列方式,在設計階段將主機控制項新增至 Word 文件或 Excel 工作表:
在設計階段將主機控制項新增至文件,方式與新增原生物件的方式相同。
將主機控制項從 [工具箱 ] 拖曳到文件和工作表上。 Excel 主機控制項可在 Excel 專案的 [Excel 控制項] 索引標籤中使用,而 Word 主機控制項可在 Word 專案的 [ Word 控制項] 索引標籤中使用。
將主機控制項從「 資料來源」 視窗拖曳到文件和工作表上。 這可讓您新增已繫結至資料的控制項。 如需詳細資訊,請參閱 將資料繫結至 Office 解決方案中的控制項。
在文件層級和 VSTO 增益集專案中,您也可以在執行階段將一些主機控制項新增至文件。 如需詳細資訊,請參閱 在執行階段將控制項新增至 Office 文件。
如需如何將主機控制項新增至文件的詳細資訊,請參閱下列主題:
命名主機控制項
當您將主機控制項從 [工具箱] 拖曳到文件時,控制項會自動使用控制項類型命名,並在結尾加上增量數字。 例如,書籤的名稱為 bookmark1、 bookmark2 等。 如果您使用 Word 或 Excel 的原生功能來新增控制項,您可以在建立控制項時為其指定特定名稱。 您也可以變更 [屬性] 視窗中 [名稱] 屬性的值,以重新命名控制項。
備註
您無法使用保留字來命名主機控制項。 例如,如果您將控制項新增至 NamedRange 工作表,並將名稱變更為 System,則建置專案時會發生錯誤。
刪除主機控制項
在文件層級專案中,您可以在設計階段刪除主機控制項,方法是選取 Excel 工作表或 Word 文件上的控制項,然後按 Delete 鍵。 不過,您必須使用 Excel 中的 [定義名稱 ] 對話方塊來刪除 NamedRange 控制項。
如果您在設計階段將主機控制項新增至檔,則不應該在執行階段以程式設計方式移除它,因為下次您嘗試在程式碼中使用控制項時,會擲回例外狀況。
Delete主機控制項的方法只會移除在執行階段新增至檔的主機控制項。 如果您呼叫 Delete 在設計階段建立之主機控制項的方法,則會擲回例外狀況。
例如,只有當NamedRange是以程式設計方式新增至工作表的,Delete方法才會成功刪除NamedRange,這稱為動態建立主機控制項。 動態建立的主機控制項也可以藉由將控制項名稱傳遞至 Remove 方法或 ControlsControls 屬性來移除。 如需詳細資訊,請參閱 在執行階段將控制項新增至 Office 文件。
如果使用者在執行階段從文件中刪除主機控制項,則解決方案可能會以非預期的方式失敗。 您可以使用 Word 和 Excel 中的文件保護功能來保護主機控制項不被刪除。 如需詳細資訊,請參閱 Office 開發範例和逐步解說。
備註
請勿在文件或工作表的Shutdown事件處理時以程式方式移除控制項。 事件發生時,Shutdown UI 元素不再可用。 如果您想要在應用程式關閉之前移除控制項,請將程式碼新增至另一個事件處理常式,例如 BeforeClose 或 BeforeSave。
用於處理主機控制事件的程式
主機控制項擴充 Office 物件的其中一種方式是新增事件。 例如, Range Excel 中的物件和 Bookmark Word 中的物件沒有事件,但 Visual Studio Tools for Office 執行階段會藉由新增可程式化事件來擴充這些物件。 您可以存取這些事件並針對這些事件進行編碼,就像存取 Windows Forms 上的控制項事件一樣:透過 Visual Basic 中的事件下拉式清單和 C# 中的事件屬性頁。 如需詳細資訊,請參閱 逐步解說:針對 NamedRange 控制項的事件進行程式設計。
備註
您不應該將 EnableEvents Excel 中物件的 Application 屬性設定為 false。 將此屬性設定為 false 可防止 Excel 引發任何事件,包括主機控制項的事件。