Расширение документов Word и книг Excel в надстройках VSTO во время выполнения
Надстройку VSTO можно использовать для настройки документов Word и книг Excel одним из описанных ниже способов.
Добавление управляемых элементов управления в любой открытый документ или лист.
Преобразование существующего объекта списка на листе Excel в расширенный объект ListObject , который предоставляет события и позволяет выполнить привязку данных с помощью модели привязки данных Windows Forms.
Получение доступа к событиям на уровне приложения, которые предоставляются Word и Excel для определенных документов, книг и листов.
Для использования данных функциональных возможностей необходимо в среде выполнения создать объект, расширяющий документ или книгу.
Область применения: сведения в этой статье относятся к проектам надстроек VSTO для следующих приложений: Excel и Word. Дополнительные сведения см. в разделе "Функции", доступные по Приложение Office ликации и типу проекта.
Создание расширенных объектов в надстройках VSTO
Расширенные объекты — это экземпляры типов, предоставляемых средой выполнения Visual Studio Tools для Office, и расширяющие функциональные возможности объектов, существующих в объектных моделях Word или Excel (так называемых собственных объектов Office). Чтобы создать расширенный объект для объекта Word или Excel, используйте метод GetVstoObject
. При первом вызове GetVstoObject
метода для указанного объекта Word или Excel он возвращает новый объект, расширяющий указанный объект. С каждым последующим вызовом этого метода для одного и того же объекта Word или Excel возвращается один и тот же расширенный объект.
Тип расширенного объекта имеет такое же имя, как тип собственного объекта Office, но этот тип определен в пространстве имен Microsoft.Office.Tools.Excel или Microsoft.Office.Tools.Word . Например, если метод GetVstoObject
вызывается для расширения объекта Document, он возвращает объект Document.
Методы GetVstoObject
предназначены для использования преимущественно в проектах надстроек VSTO. Кроме того, их можно использовать в проектах уровня документа, но в этом случае они ведут себя иначе и имеют меньшее число применений.
Чтобы определить, создан ли уже расширенный объект для определенного собственного объекта Office, воспользуйтесь методом HasVstoObject
. Дополнительные сведения см. в статье "Определение того, был ли расширен объект Office".
Создание элементов узла
При использовании GetVstoObject
расширения объекта уровня документа (т. е. объекта WorkbookDocumentWorksheetили) возвращенный объект называется элементом узла. Ведущий элемент — это тип, который может содержать другие объекты, включая другие расширенные объекты и элементы управления. Ведущий элемент похож на соответствующий тип в основной сборке взаимодействия Word или Excel, но обладает дополнительными функциональными возможностями. Дополнительные сведения о элементах узла см. в обзоре элементов узла и элементов управления узлами.
Созданный ведущий документ можно использовать для добавления управляемых элементов управления в документ, книгу или лист. Дополнительные сведения см. в разделе "Добавление управляемых элементов управления в документы и листы".
Создание ведущего элемента для документа Word
В следующем примере кода показано, как создать ведущий элемент для активного документа.
Создание ведущего элемента для книги Excel
В следующем примере кода показано, как создать ведущий элемент для активной книги.
Создание ведущего элемента для листа Excel
В следующем примере кода показано, как создать ведущий элемент для активного листа проекта.
Создание элементов управления узлом ListObject
Если метод GetVstoObject
используется для расширения объекта ListObject, возвращается объект ListObject. Имеет ListObject все функции исходного ListObject. Он также имеет дополнительные функциональные возможности и может быть привязан к данным с помощью модели привязки данных Windows Forms. Дополнительные сведения см. в элементе управления ListObject.
Создание элемента управления ведущего приложения для ListObject
В следующем примере кода показано, как создать объект ListObject для первого объекта ListObject в активном листе проекта.
Добавление управляемых элементов управления в документы и листы
После создания объекта Document или Worksheetв документ или на лист можно добавить элементы управления, которым соответствуют эти расширенные объекты. Чтобы добавить элементы управления, используйте Controls
свойство объекта Document или Worksheet. Дополнительные сведения см. в разделе "Добавление элементов управления в документы Office во время выполнения".
Добавлять можно элементы управления Windows Forms или элементы управления ведущего приложения. Элемент управления узлом — это элемент управления, предоставляемый средой выполнения набор средств Visual Studio для Office, которая упаковывает соответствующий элемент управления в основную сборку взаимодействия Word или Excel. Элемент управления узла предоставляет все поведение базового собственного объекта Office. Он также вызывает события и может быть привязан к данным с помощью модели привязки данных Windows Forms. Дополнительные сведения см. в обзоре элементов узла и элементов управления узлами.
Примечание.
Надстройка VSTO не позволяет добавить элемент управления XmlMappedRange на лист либо элемент управления XMLNode или XMLNodes в документ. Эти элементы управления ведущего приложения невозможно добавить программными средствами. Дополнительные сведения см. в разделе "Программные ограничения" элементов узла и элементов управления узлами.
Сохранение и удаление элементов управления
Управляемые элементы управления, добавленные в документ или на лист, не сохраняются при сохранении и последующем закрытии документа. Все элементы управления удаляются; остаются только собственные объекты Office. Например, объект ListObject становится объектом ListObject. Все элементы управления Windows Forms также удаляются, но оболочки ActiveX для элементов управления в документе остаются. Для очистки элементов управления или повторного создания элементов управления при последующем открытии документа необходимо включить в надстройку соответствующий код. Дополнительные сведения см. в статье "Сохранение динамических элементов управления в документах Office".
Доступ к событиям уровня приложения в документах и книгах
Некоторые события документа, книги и листа в собственных объектных моделях Word и Excel вызываются только на уровне приложения. Например, событие DocumentBeforeSave вызывается при открытии документа в Word, но определяется в классе Application , а не в классе Document .
Если в надстройке VSTO используются только собственные объекты Office, необходимо обработать эти события уровня приложения, а затем написать дополнительный код, определяющий, является ли документ, который вызвал событие, одним из настроенных. Ведущие элементы предоставляют такие события на уровне документа; это упрощает обработку событий для конкретного документа. Также можно создать ведущий элемент, а затем обработать для него событие.
Пример использования собственных объектов Word
В следующем примере кода показано, как обрабатывать событие уровня приложения для документов Word. Метод CreateDocument
создает новый документ, а затем определяет обработчик событий DocumentBeforeSave , который предотвращает сохранение этого документа. Это событие уровня приложения, которое вызывается для Application объекта, и обработчик событий должен сравнить Doc
параметр с document1
объектом, чтобы определить, представляет ли document1
сохраненный документ.
private Word.Document document1 = null;
private void CreateDocument1()
{
document1 = this.Application.Documents.Add(ref missing,
ref missing, ref missing, ref missing);
this.Application.DocumentBeforeSave +=
new Word.ApplicationEvents4_DocumentBeforeSaveEventHandler(
Application_DocumentBeforeSave);
}
private void Application_DocumentBeforeSave(Word.Document Doc,
ref bool SaveAsUI, ref bool Cancel)
{
if (Type.ReferenceEquals(Doc, document1))
{
Cancel = true;
}
}
Примеры использования элемента узла
В следующем примере кода данная процедура упрощена за счет обработки события BeforeSave ведущего документа Document . Метод CreateDocument2
в этих примерах создает объект Document , который расширяет document2
объект, а затем определяет BeforeSave обработчик событий, который предотвращает сохранение документа. Обработчик событий вызывается только при document2
сохранении и может отменить действие сохранения, не выполняя никаких дополнительных действий, чтобы проверить, какой документ сохранен.
Следующий пример кода демонстрирует эту задачу.
private Word.Document document2 = null;
private Microsoft.Office.Tools.Word.Document vstoDocument = null;
private void CreateDocument2()
{
document2 = this.Application.Documents.Add(ref missing,
ref missing, ref missing, ref missing);
vstoDocument = Globals.Factory.GetVstoObject(document2);
vstoDocument.BeforeSave += new SaveEventHandler(vstoDocument_BeforeSave);
}
private void vstoDocument_BeforeSave(object sender, SaveEventArgs e)
{
e.Cancel = true;
}
Определение того, был ли расширен объект Office
Чтобы определить, создан ли уже расширенный объект для определенного собственного объекта Office, воспользуйтесь методом HasVstoObject
. Этот метод возвращает значение true , если расширенный объект уже создан.
Используйте метод Globals.Factory.HasVstoObject
. Передайте собственный объект Word или Excel (например, Document или Worksheet), который необходимо протестировать для расширенного объекта.
Метод HasVstoObject
полезен в ситуации, когда код необходимо запускать только при условии, что заданный объект Office имеет расширенный объект. Например, если у вас есть надстройка VSTO Word, которая обрабатывает DocumentBeforeSave событие для удаления управляемых элементов управления из документа до его сохранения, используйте HasVstoObject
метод, чтобы определить, был ли документ расширен. Если документ не был расширен, он не может иметь управляемые элементы управления, и обработчик событий может вернуться, не пытаясь очистить элементы управления в документе.