按一下以給予評分及指教
MSDN
MSDN Library
 主項目和主控制項的程式設計限制
This page is specific to
Microsoft Visual Studio 2008/.NET Framework 3.5

Other versions are also available for the following:
Microsoft Visual Studio Tools for the Microsoft Office system (3.0 版)
主項目和主控制項的程式設計限制

注意

適用於

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

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

專案類型

  • 文件層級專案

Microsoft Office 版本

  • 2007 Microsoft Office system

  • Microsoft Office 2003

Visual Studio Tools for Office 中提供的每個主項目和主控制項,都有基礎原生 Microsoft Office Word 或 Microsoft Office Excel 物件。Office 物件 (主項目、主控制項和原生 Office 物件) 的許多方法和屬性 (Property) 都會在基礎 Office 物件的型別中取得或設定值,而不是在主項目或主控制項中。您可以使用主項目或主控制項的 InnerObject 屬性來存取基礎物件。不過,卻無法將原生 Office 物件轉型為其對應的主項目或主控制項。

在執行階段以程式設計的方式建立新文件或工作表時,不會自動建立主項目。例如,如果在執行階段加入 Word 文件,則它的型別是 Microsoft.Office.Interop.Word..::.Document,而不是 Microsoft.Office.Tools.Word..::.Document。同樣地,在執行階段使用 Add 方法以程式設計的方式加入工作表時,您取得的工作表型別是 Microsoft.Office.Interop.Excel..::.Worksheet,而不是 Microsoft.Office.Tools.Excel..::.Worksheet。您可以用程式設計方式建立主控制項,但是只能將其加入至主項目。如果以程式設計方式建立文件或工作表,則該項目不是主項目,而且您也無法將主控制項加入至以程式設計方式建立的文件或工作表。您只能在設計階段中建立主項目。

您可以使用其中一種 Add<Control> 方法,以程式設計方式將主控制項加入至主項目。例如,若要將 NamedRange 控制項加入文件,請使用 AddNamedRange 方法。

注意事項:

Add<Control> 方法不會提供給下列主控制項,因為它們無法以程式設計方式加入至文件:XmlMappedRangeXMLNodeXMLNodes

無法將 Managed 控制項加入至原生 Word Microsoft.Office.Interop.Word..::.Document 或 Excel Microsoft.Office.Interop.Excel..::.Worksheet。主控制項和 Windows Form 控制項只能加入至主項目。如需以程式設計的方式將控制項加入至文件的詳細資訊,請參閱在執行階段將控制項加入至 Office 文件

主項目的大部分方法和屬性,都會傳回主項目所依據的基礎原生 Office 物件。例如,Excel 中主控制項的 Parent 屬性會傳回 Microsoft.Office.Interop.Excel..::.Worksheet 物件 (而不是 Microsoft.Office.Tools.Excel..::.Worksheet 主項目),而 Word 中主控制項的 Parent 屬性會傳回 Microsoft.Office.Interop.Word..::.Document 物件 (而不是 Microsoft.Office.Tools.Word..::.Document 主項目)。如果嘗試將原生 Office 物件轉換為主項目或主控制項,將會擲回 InvalidCastException

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

您可以使用 ControlCollection,逐一查看文件上的所有控制項 (主控制項和 Windows Form 控制項),然後尋找與您想要的主控制項型別相符的項目。下列範例判斷控制項的型別是否為 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.
    }
}

在 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 物件時。如需詳細資訊,請參閱 ExcelLocale1033Proxy

下列範例會建立 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);

社群內容   什麼是社群內容?
新增內容 RSS  註解
Processing
© 2008 Microsoft Corporation. All rights reserved. 使用規定  |  商標  |  隱私權聲明
Page view tracker