主專案和主控制件的程式設計限制

每個主項目和主控制項的行為,都已設計成像是對應的原生 Microsoft Office Word 或 Microsoft Office Excel 物件一樣,同時還具備額外的功能。 不過,主項目和主控制項在執行階段的行為,還是與原生 Office 物件有些基本差異。

如需主專案和主控件的一般資訊,請參閱 主專案和主控件概觀

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

以程序設計方式建立主專案

當您在執行階段使用 Word 或 Excel 物件模型,以程式設計方式建立或開啟文件、活頁簿或工作表時,此項目並不是主項目。 相反地,這個新物件是原生 Office 物件。 例如,如果您在執行階段使用 Add 方法建立新的 Word 文件,該文件會是原生 Document 物件,而不是 Document 主項目。 同樣地,當您在執行階段使用 Add 方法建立新工作表時,您會得到原生 Worksheet 物件,而不是 Worksheet 主項目。

在文件層級專案中,您無法在執行階段建立主項目。 主項目只能在文件層級專案的設計階段建立。 如需詳細資訊,請參閱 檔主專案活頁簿主專案工作表主專案

在 VSTO 增益集專案中,您可以在執行階段建立 DocumentWorkbookWorksheet 主項目。 如需詳細資訊,請參閱 在運行時間擴充 VSTO 載入宏中的 Word 檔和 Excel 活頁簿。

以程序設計方式建立主控制件

您可以在執行階段,以程式設計方式將主控制項加入 DocumentWorksheet 主項目。 如需詳細資訊,請參閱 在運行時間將控件新增至 Office 檔。

您無法將主控制項加入原生 DocumentWorksheet

注意

下列主控制項無法以程式設計方式加入工作表或文件: XmlMappedRangeXMLNodeXMLNodes

瞭解主專案、主控件和原生 Office 對象之間的類型差異

在每個主項目和主控制項中,都有基礎的原生 Microsoft Office Word 或 Microsoft Office Excel 物件。 您可以使用主專案或主控件的 InnerObject 屬性來存取基礎物件。 不過,您無法將原生 Office 物件轉換成其對應的主項目或主控制項。 如果您嘗試將原生 Office 物件轉換成主項目或主控制項的類型,將會擲回 InvalidCastException

在幾種情況下,主項目和主控制項與基礎原生 Office 物件之間的類型差異,可能會影響您的程式碼。

將主控件傳遞至方法和屬性

在 Word 中,您無法將主控制項傳遞至需要原生 Word 物件做為參數的方法或屬性。 您必須使用主控件的 InnerObject 屬性,才能傳回基礎原生 Word 物件。 例如,您可以藉由將 Bookmark 主控制項的 InnerObject 屬性傳遞至方法,將 Bookmark 物件傳遞至方法。

在 Excel 中,當方法或屬性預期基礎 Excel 物件時,您必須使用主控件的 InnerObject 屬性,將主控件傳遞至方法或屬性。

下列範例會建立 NamedRange 控制項,並將其傳遞至 AutoFill 方法。 這個程式碼使用具名範圍的 InnerObject 屬性,傳回 Range 方法所需的基礎 Office AutoFill

this.Range["A1"].Value2 = "Monday";
this.Range["A2"].Value2 = "Tuesday";

Microsoft.Office.Tools.Excel.NamedRange dayRange = 
    this.Controls.AddNamedRange(this.Range["A1", "A7"], "dayRange");
this.Range["A1", "A2"].AutoFill(dayRange.InnerObject, Excel.XlAutoFillType.xlFillDays);

傳回原生 Office 方法和屬性的類型

主項目的大多數方法和屬性都會傳回主項目所依據的基礎原生 Office 物件。 例如,Excel 之 Parent 主控制項的 NamedRange 屬性會傳回 Worksheet 物件,而不是 Worksheet 主項目。 同樣地,Word 之 Parent 主控制項的 RichTextContentControl 屬性會傳回 Document 物件,而不是 Document 主項目。

存取主機控件的集合

Visual Studio Tools for Office 運行時間不提供每種主機控件類型的個別集合。 請改用主專案的 Controls 屬性,逐一查看檔或工作表上所有受管理的控件(主控件和 Windows Forms 控件),然後尋找符合您感興趣的主控件類型的專案。 下列程式碼範例會檢查 Word 文件上的每個控制項,並判斷控制項是否為 Bookmark

foreach (object targetControl in this.Controls)
{
    Microsoft.Office.Tools.Word.Bookmark bookMark =
        targetControl as Microsoft.Office.Tools.Word.Bookmark;

    if (bookMark != null)
    {
        // Do some work with the bookmark here.
    }
}

如需主專案之 Controls 屬性的詳細資訊,請參閱 在運行時間將控件新增至 Office 檔。

Word 和 Excel 物件模型包含在文件和工作表上公開原生控制項集合的屬性。 您無法使用這些屬性來存取 Managed 控制項。 例如,您無法使用 BookmarkBookmarks 屬性或 DocumentBookmarks 屬性,來列舉文件中的每個 Document主控制項。 這些屬性只會包含文件中的 Bookmark 控制項,而不會包含文件中的 Bookmark 主控制項。