Получение вложенных объектов из собственных объектов Office в настройках уровня документа
Обновлен: Июль 2008
Применение |
---|
Сведения, приведенные в данном разделе, относятся только к указанным проектам Visual Studio Tools for Office и версиям приложений Microsoft Office. Тип проекта
Версия Microsoft Office
Дополнительные сведения см. в разделе Доступность функций по типам приложений и проектов. |
Многие обработчики событий для событий 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 в надстройках уровня приложения во время выполнения.
Примечание. |
---|
Чтобы использовать методы 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. |