主項目和主控制項概觀
主項目和主控制項是型別,有助於為使用 Visual Studio 中的 Office 開發工具建立的 Office 方案提供程式撰寫模型。主項目和主控制項會以較接近與 Managed 物件 (例如 Windows Form 控制項) 互動的方式,與以 COM 為基礎的 Microsoft Office Word 和 Microsoft Office Excel 物件模型進行互動。
**適用於:**本主題中的資訊適用於下列應用程式的文件層級專案和應用程式層級專案:Excel 2013 和 Excel 2010、Word 2013 和 Word 2010。如需詳細資訊,請參閱依 Office 應用程式和專案類型提供的功能。
主項目
在 Office 專案中,主項目是位於物件模型階層架構最上層的型別。Visual Studio Tools for Office Runtime 會為 Word 和 Excel 方案定義下列主項目:
這些型別中的每一個都會擴充原本就存在於 Word 或 Excel 物件模型的物件,稱為" 原生 Office 物件。例如,Microsoft.Office.Tools.Word.Document 主項目會擴充 Microsoft.Office.Interop.Word.Document 物件,此物件是在 Word 的主要 Interop 組件中定義。
主項目通常與對應的 Office 物件具有相同的基本功能,但是增強了下列功能:
裝載 Managed 控制項 (其中包括主控制項和 Windows Form 控制項) 的能力。
更豐富的事件模型。原生 Word 和 Excel 物件模型中的某些文件、活頁簿和工作表事件只會在應用程式層級上引發。主項目會在文件層級提供這些事件,如此就比較容易處理特定文件的事件。
了解文件層級專案中的主項目
在文件層級專案中,主項目會為程式碼提供進入點 (Entry Point),也會提供協助您開發方案的設計工具。
Microsoft.Office.Tools.Word.Document 和 Microsoft.Office.Tools.Excel.Worksheet 主項目具有相關聯的設計工具,這些工具就像 Windows Form 設計工具,是文件或工作表的視覺化表示。您可以使用這個設計工具,直接在 Word 或 Excel 中修改文件或工作表的內容,以及將控制項拖曳至設計介面。如需詳細資訊,請參閱Document 主項目與Worksheet 主項目。
Microsoft.Office.Tools.Excel.Workbook 主項目不會做為具有使用者介面之控制項的容器。相反地,這個主項目設計工具的作用就像是元件匣,可讓您將元件 (例如 DataSet) 拖曳至其設計介面上。如需詳細資訊,請參閱Workbook 主項目。
您無法在文件層級專案中以程式設計方式建立主項目。請改用 Visual Studio 在設計階段於專案中自動產生的 ThisDocument、ThisWorkbook 或 Sheetn 類別。這些產生的類別衍生自主項目,並且會提供程式碼的進入點。如需詳細資訊,請參閱主項目和主控制項的程式設計限制。
了解應用程式層級專案中的主項目
根據預設,建立應用程式層級增益集時,您無法存取任何主項目。不過,您可以在執行階段於 Word 和 Excel 增益集中產生 Microsoft.Office.Tools.Word.Document、Microsoft.Office.Tools.Excel.Workbook 和 Microsoft.Office.Tools.Excel.Worksheet 主項目。
在您產生主項目後,您可以執行像是將控制項加入至文件。如需詳細資訊,請參閱在應用程式層級增益集的執行階段中擴充 Word 文件和 Excel 活頁簿。
主控制項
主控制項會擴充 Word 和 Excel 物件模型中的各種使用者介面 (UI) 物件,例如 Microsoft.Office.Interop.Word.ContentControl 和 Microsoft.Office.Interop.Excel.Range 物件。
下列主控制項適用於 Excel 專案:
下列主控制項適用於 Word 專案:
加入至 Office 文件的主控制項與原生 Office 物件有類似的行為方式,但是主控制項還具備額外的功能,包括事件和資料繫結 (Data Binding) 能力。例如,當您要在 Excel 中擷取原生 Microsoft.Office.Interop.Excel.Range 物件的事件時,必須先處理工作表的變更事件。然後,您必須判斷該變更是否在 Microsoft.Office.Interop.Excel.Range 中發生。相反地,Microsoft.Office.Tools.Excel.NamedRange 主控制項具有您可直接處理的 Change 事件。
主項目與主控制項之間的關係,非常類似 Windows Form 與 Windows Form 控制項之間的關係。將 Microsoft.Office.Tools.Excel.NamedRange 控制項放在 Microsoft.Office.Tools.Excel.Worksheet 主項目上,就像在 Windows Form 上放置文字方塊控制項一樣。下圖顯示主項目和主控制項之間的關係。
此外,您也可以在 Office 方案中使用 Windows Form 控制項,方法是直接將控制項加入至 Word 和 Excel 文件介面。如需詳細資訊,請參閱Office 文件上的 Windows Form 控制項概觀。
注意事項 |
---|
不支援將主控制項或 Windows Form 控制項加入至 Word 子文件。 |
將主控制項加入至文件
在文件層級專案中,您可以使用下列方式,在設計階段將主控制項加入至 Word 文件或 Excel 工作表:
依照加入原生物件的相同方式,在設計階段將主控制項加入至文件。
將主控制項從 [工具箱] 拖曳到文件和工作表上。您可以在 Excel 專案的 [Excel 控制項] 索引標籤中使用 Excel 主控制項,並在 Word 專案的 [Word 控制項] 索引標籤中使用 Word 主控制項。
將主控制項從 [資料來源] 視窗拖曳到文件和工作表上。這可讓您加入已經繫結至資料的控制項。如需詳細資訊,請參閱將資料繫結至 Office 方案中的控制項。
在文件層級和應用程式層級專案中,您也可以在執行階段將某些主控制項加入至文件。如需詳細資訊,請參閱在執行階段將控制項加入至 Office 文件。
如需如何將主控制項加入至文件的詳細資訊,請參閱下列主題:
命名主控制項
當您將主控制項從 [工具箱] 拖曳到文件時,會自動使用控制項型別來命名控制項,並在結尾處加上一個累加號碼。例如,書籤會命名為 bookmark1、bookmark2 等等。如果使用 Word 或 Excel 的原生功能來加入控制項,可以在建立控制項時為它指定特定的名稱。您也可以變更 [屬性] 視窗中的 [Name] 屬性,重新命名控制項。
注意事項 |
---|
您不能使用保留字為主控制項命名。例如,如果將 NamedRange 控制項加入至工作表,並將名稱變更為 System,則建置專案時會發生錯誤。 |
刪除主控制項
在文件層級專案中,您可以刪除主控制項在設計階段可以選取 Excel 工作表或 Word 文件上的控制項並按 DELETE 鍵。不過,您必須使用 Excel 中的 [定義名稱] 對話方塊來刪除 NamedRange 控制項。
如果在設計階段將主控制項加入至文件,則不應在執行階段以程式設計的方式將其移除,否則當您下次嘗試在程式碼中使用控制項時,將會擲回例外狀況。主控制項的 Delete 方法,只會移除在執行階段加入至文件的主控制項。如果呼叫主控制項的 Delete 方法,而該主控制項是在設計階段建立,則會擲回例外狀況。
例如,NamedRange 的 Delete 方法只有在它是以程式設計方式加入至工作表時 (即動態建立的主項目),才能成功刪除 NamedRange。將控制項名稱傳遞至 Worksheet.Controls 或 Document.Controls 屬性的 Remove 方法,也可以移除動態建立的主控制項。如需詳細資訊,請參閱在執行階段將控制項加入至 Office 文件。
如果使用者在執行階段從文件刪除主控制項,方案可能會以無法預期的方式失敗。您可以使用 Word 和 Excel 中的文件保護功能,防止主控制項遭刪除。如需詳細資訊,請參閱Office 程式開發範例和逐步解說。
注意事項 |
---|
請勿在文件或工作表的 Shutdown 事件處理常式期間以程式設計方式移除控制項。當 Shutdown 事件發生時,UI 項目便無法再使用。如果您想要在應用程式關閉前移除控制項,請將程式碼加入其他事件處理常式,例如 BeforeClose 或 BeforeSave。 |
對主控制項事件進行程式設計
主控制項擴充 Office 物件的其中一種方法是透過加入事件。例如,Excel 中的 Microsoft.Office.Interop.Excel.Range 物件和 Word 中的 Microsoft.Office.Interop.Word.Bookmark 物件沒有事件,但是 Visual Studio Tools for Office Runtime 會藉由加入可程式化的事件來擴充這些物件。您可以存取這些事件並對其進行編碼,使用的方式與存取 Windows Form 上控制項的事件相同:透過 Visual Basic 中的事件下拉式清單,以及 C# 中的事件屬性頁。如需詳細資訊,請參閱逐步解說:針對 NamedRange 控制項的事件進行程式設計。
注意事項 |
---|
請勿在 Excel 中將 Application 物件的 EnableEvents 屬性設定為 false。將此屬性設定為 false,會導致 Excel 無法引發任何事件,包括主控制項的事件在內。 |