按一下以給予評分及指教
MSDN
MSDN Library
Visual Studio
Office UI 自訂
 主項目和主控制項的程式設計限制

  開啟低頻寬檢視
本頁僅適用於
Microsoft Visual Studio 2008/.NET Framework 3.5

其他版本也適用於下列軟體:
Microsoft Visual Studio Tools for the Microsoft Office system (3.0 版)
主項目和主控制項的程式設計限制

更新: 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

在每個主項目和主控制項中,都有基礎的原生 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

Visual Basic
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)

C#
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

Visual Basic
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

C#
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.
    }
}

日期

記錄

原因

2008 年 7 月

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

SP1 功能變更。

社群內容   什麼是社群內容?
新增內容 RSS  註解
Processing
© 2009 Microsoft Corporation. 著作權所有,並保留一切權利。 使用規定  |  商標  |  隱私權聲明
Page view tracker