主項目和主控制項的程式設計限制

更新: 2008 年 7 月

適用於

本主題中的資訊僅適用於指定的 Visual Studio Tools for Office 專案和 Microsoft Office 版本。

文件層級專案

  • Excel 2003

  • Excel 2007

  • Word 2003

  • Word 2007

應用程式層級專案

  • Excel 2007

  • Word 2007

如需詳細資訊,請參閱依應用程式和專案類型提供的功能

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

如需主項目和主控制項的一般資訊,請參閱主項目和主控制項概觀

以程式設計方式建立主項目

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

在文件層級專案中,您無法在執行階段建立主項目。主項目只能在設計階段建立於文件層級專案中。如需詳細資訊,請參閱 Document 主項目Workbook 主項目Worksheet 主項目

從 Visual Studio 2008 Service Pack 1 (SP1) 開始,您可以透過 Excel 2007 和 Word 2007 的應用程式層級增益集,於執行階段建立 Microsoft.Office.Tools.Word.DocumentMicrosoft.Office.Tools.Excel.WorkbookMicrosoft.Office.Tools.Excel.Worksheet 主項目。如需詳細資訊,請參閱在應用程式層級增益集的執行階段中擴充 Word 文件和 Excel 活頁簿

以程式設計方式建立主控制項

您可以以程式設計的方式,在執行階段將主控制項加入至 Microsoft.Office.Tools.Word.DocumentMicrosoft.Office.Tools.Excel.Worksheet 主項目。如需詳細資訊,請參閱在執行階段將控制項加入至 Office 文件

您無法將主控制項加入至原生 Microsoft.Office.Interop.Word.DocumentMicrosoft.Office.Interop.Excel.Worksheet

注意事項:

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

了解主項目、主控制項和原生 Office 物件之間的型別差異

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

在許多情況下,主項目和主控制項與基礎原生 Office 物件之間的型別差異會影響程式碼。

傳遞主控制項至方法和屬性

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

在 Excel 中,有兩種情況必須使用主控制項的 InnerObject 屬性 (Property):

  • 當方法或屬性 (Property) 需要基礎 Excel 物件時。

  • ExcelLocale1033Attribute 屬性 (Attribute) 設定為 false,而且方法或屬性需要 Object 而非基礎 Excel 物件時。

下列範例會建立 Microsoft.Office.Tools.Excel.NamedRange 控制項,並將其傳遞至 AutoFill 方法。此程式碼會使用已命名範圍的 InnerObject 屬性,傳回 AutoFill 方法所需的基礎 Office Microsoft.Office.Interop.Excel.Range

Me.Range("A1").Value2 = "Monday"
Me.Range("A2").Value2 = "Tuesday"

Dim dayRange As Microsoft.Office.Tools.Excel.NamedRange = _
    Me.Controls.AddNamedRange(Me.Range("A1", "A7"), "dayRange")

Me.Range("A1", "A2").AutoFill(dayRange.InnerObject, Excel.XlAutoFillType.xlFillDays)
this.Range["A1", missing].Value2 = "Monday";
this.Range["A2", missing].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 中 NamedRange 主控制項的Parent 屬性會傳回 Microsoft.Office.Interop.Excel.Worksheet 物件,而不是傳回 Microsoft.Office.Tools.Excel.Worksheet 主項目。同樣地,Word 中 RichTextContentControl 主控制項的 Parent 屬性會傳回 Microsoft.Office.Interop.Word.Document 物件,而不是傳回 Microsoft.Office.Tools.Word.Document 主項目。

存取主控制項的集合

Visual Studio Tools for Office 不會為每種型別的主控制項提供個別集合。例如,無法使用 Microsoft.Office.Interop.Word.Bookmarks 集合,來列舉文件中的每個 Microsoft.Office.Tools.Word.Bookmark 控制項。Microsoft.Office.Interop.Word.Bookmarks 集合包含文件中的所有書籤;它並不會區別 Microsoft.Office.Tools.Word.Bookmark 控制項和 Microsoft.Office.Interop.Word.Bookmark

您可以使用 Worksheet.ControlsDocument.Controls 屬性,逐一查看文件或工作表上的所有控制項 (主控制項和 Windows Form 控制項),然後尋找與您想要使用之主控制項型別相符的項目。下列程式碼範例會檢查 Word 文件中的每個控制項,並判斷控制項是否為 Microsoft.Office.Tools.Word.Bookmark

Dim targetControl As Object
For Each targetControl In Me.Controls

    If TypeOf (targetControl) Is Microsoft.Office.Tools.Word.Bookmark Then
        Dim bookMark As Microsoft.Office.Tools.Word.Bookmark = _
            CType(targetControl, Microsoft.Office.Tools.Word.Bookmark)

        ' Do some work with the book mark here.
    End If
Next
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 book mark here.
    }
}

請參閱

概念

主項目和主控制項概觀

Worksheet 主項目

Workbook 主項目

Document 主項目

參考

Worksheet.Controls

Document.Controls

其他資源

Word 主控制項

Excel 主控制項

變更記錄

日期

記錄

原因

2008 年 7 月

加入有關使用應用程式層級增益集建立主項目的資訊。

SP1 功能變更。