Поделиться через


Получение вложенных объектов из собственных объектов Office в настройках уровня документа

Обновлен: Июль 2008

Применение

Сведения, приведенные в данном разделе, относятся только к указанным проектам Visual Studio Tools for Office и версиям приложений Microsoft Office.

Тип проекта

  • Проекты уровня документа

Версия Microsoft Office

  • Excel 2007

  • Word 2007

Дополнительные сведения см. в разделе Доступность функций по типам приложений и проектов.

Многие обработчики событий для событий Office получают собственные объекты Office, представляющие рабочую книгу, лист или документ, инициирующий событие. В некоторых случаях может возникнуть необходимость в выполнении определенного кода только в том случае, если рабочая книга или документ в настройке уровня документа инициирует событие. Например, в настройке уровня документа для Excel может возникнуть необходимость в выполнении определенного кода, когда пользователь активирует один или несколько ведущих элементов Microsoft.Office.Tools.Excel.Worksheet в настройке, но не тогда, когда пользователь активирует рабочий лист в какой-либо книге, которая в это же время оказывается открытой.

Начиная с пакета обновления 1 для Visual Studio 2008, при доступе к собственному объекту Office можно проверить, расширен ли этот объект в ведущей позиции или элементе управления ведущего приложения Microsoft.Office.Tools.Excel.ListObject в настройке уровня документа.

Ведущие элементы и элементы управления ведущего приложения являются объектами Visual Studio Tools for Office, добавляющими функциональные возможности объектам, существующим внутри объектных моделей Word или Excel (называемых собственными объектами Office). Собирательно ведущие элементы и элементы управления ведущего приложения также называются расширенными объектами. Дополнительные сведения о ведущих элементах и элементах управления ведущего приложения см. в разделе Общие сведения о ведущих элементах и элементах управления ведущего приложения.

Использование методов GetVstoObject и HasVstoObject

Для проверки собственного объекта Office используйте методы HasVstoObject и GetVstoObject экземпляра одного из следующих собственных объектов Office:

Если необходимо определить, имеет ли собственный объект Office расширенный объект в текущей настройке, используйте метод HasVstoObject. Этот метод возвращает true, если собственный объект Office имеет расширенный объект, и false, если нет.

Для получения доступа к расширенному объекту используйте метод GetVstoObject. Этот метод возвращает объект Microsoft.Office.Tools.Excel.ListObject, Microsoft.Office.Tools.Excel.Workbook, Microsoft.Office.Tools.Excel.Worksheet или Microsoft.Office.Tools.Word.Document, если собственный объект Office имеет его. В противном случае GetVstoObject возвращает null. Например, метод GetVstoObject объекта Microsoft.Office.Interop.Word.Document возвращает Microsoft.Office.Tools.Word.Document, если Microsoft.Office.Interop.Word.Document является основным объектом для документа в текущем проекте документа Word.

Нельзя использовать GetVstoObject в решении уровня документа для создания нового ведущего элемента во время выполнения. Этот объект можно использовать только для доступа к существующим ведущим элементам, созданным в текущем проекте во время выполнения. Дополнительные сведения см. в разделе Программные ограничения ведущих элементов и элементов управления ведущего приложения.

В проектах уровня приложения можно использовать метод GetVstoObject для создания новых ведущих элементов во время выполнения. Дополнительные сведения см. в разделе Расширение документов Word и книг Excel в надстройках уровня приложения во время выполнения.

Cc668196.alert_note(ru-ru,VS.90).gifПримечание.

Чтобы использовать методы GetVstoObject и HasVstoObject, необходимо добавить оператор using (для C#) или Imports (для Visual Basic) для пространств имен Microsoft.Office.Tools.Excel.Extensions или Microsoft.Office.Tools.Word.Extensions в верхнюю часть файла кода. Методы GetVstoObject и HasVstoObject реализованы как методы расширения во времени выполнения Visual Studio Tools for Office и указанные операторы позволяют вызывать эти методы.

Определение, инициировано ли событие ведущим элементов

В следующих примерах кода демонстрируются методы HasVstoObject и GetVstoObject. Оба примера обрабатывают событие SheetActivate класса ThisWorkbook в проекте книги Excel.

Первый пример определяет, были ли активирован один из ведущих элементов Microsoft.Office.Tools.Excel.Worksheet, сопоставляя параметр Sh со свойством InnerObject каждого ведущего элемента по умолчанию.

Sub ThisWorkbook_SheetActivate1(ByVal Sh As Object) Handles Me.SheetActivate
    Dim vstoWorksheet As Microsoft.Office.Tools.Excel.Worksheet = Nothing

    If Type.ReferenceEquals(Globals.Sheet1.InnerObject, Sh) Then
        vstoWorksheet = Globals.Sheet1
    ElseIf Type.ReferenceEquals(Globals.Sheet2.InnerObject, Sh) Then
        vstoWorksheet = Globals.Sheet2
    ElseIf Type.ReferenceEquals(Globals.Sheet3.InnerObject, Sh) Then
        vstoWorksheet = Globals.Sheet3
    End If

    If vstoWorksheet IsNot Nothing Then
        ' Do something with the VSTO worksheet here.
    End If
End Sub
void ThisWorkbook_SheetActivate1(object Sh)
{
    Microsoft.Office.Tools.Excel.Worksheet vstoWorksheet = null;

    if (Type.ReferenceEquals(Globals.Sheet1.InnerObject, Sh))
        vstoWorksheet = Globals.Sheet1;
    else if (Type.ReferenceEquals(Globals.Sheet2.InnerObject, Sh))
        vstoWorksheet = Globals.Sheet2;
    else if (Type.ReferenceEquals(Globals.Sheet3.InnerObject, Sh))
        vstoWorksheet = Globals.Sheet3;

    if (vstoWorksheet != null)
    {
        // Do something with the VSTO worksheet here.
    }
}

Следующий пример упрощает этот процесс, используя методы HasVstoObject и GetVstoObject параметра Sh.

Sub ThisWorkbook_SheetActivate2(ByVal Sh As Object) Handles Me.SheetActivate
    Dim vstoWorksheet As Microsoft.Office.Tools.Excel.Worksheet = Nothing
    Dim interopWorksheet As Microsoft.Office.Interop.Excel.Worksheet = _
        CType(Sh, Microsoft.Office.Interop.Excel.Worksheet)

    If interopWorksheet IsNot Nothing AndAlso _
        interopWorksheet.HasVstoObject() Then
        vstoWorksheet = interopWorksheet.GetVstoObject()
    End If

    If vstoWorksheet IsNot Nothing Then
        ' Do something with the VSTO worksheet here.
    End If
End Sub
void ThisWorkbook_SheetActivate2(object Sh)
{
    Microsoft.Office.Tools.Excel.Worksheet vstoWorksheet = null;
    Microsoft.Office.Interop.Excel.Worksheet interopWorksheet = 
        Sh as Microsoft.Office.Interop.Excel.Worksheet;

    if (interopWorksheet != null && interopWorksheet.HasVstoObject())
    {
        vstoWorksheet = interopWorksheet.GetVstoObject();
    }

    if (vstoWorksheet != null)
    {
        // Do something with the VSTO worksheet here.
    }
}

См. также

Основные понятия

Настройки программирования уровня документа

Общие сведения о ведущих элементах и элементах управления ведущего приложения

Расширение документов Word и книг Excel в надстройках уровня приложения во время выполнения

Методы расширения (Visual Basic)

Ссылки

Методы расширения (руководство по программированию в C#)

Журнал изменений

Дата

Журнал

Причина

Июль 2008

Добавлен раздел.

Изменение функции SP1.