Новые объекты и новые возможности Office XP

Владимир Биллиг

Документы, проекты и библиотеки объектов Office XP

Общность и схожесть объектов

Microsoft Office 10.0 Object Library

Поиск, открытие и сохранение файлов в диалоговом режиме

Поиск, открытие и сохранение файлов в программном режиме

Цифровая подпись документов и проектов

Почему нельзя работать с объектом OfficeDataSourceObject

Пересылка документа по электронной почте

 

Microsoft Office стал де-факто средой разработки программных проектов. С точки зрения программистов, работающих в этой среде, Office — это прежде всего совокупность библиотек объектов, доступных в проекте. В каждой новой версии Office появляются новые библиотеки, новые объекты в существующих библиотеках, новые свойства, методы и события у ранее существовавших объектов. С этой объектной точки зрения рассматриваются новые возможности Office XP. В данной статье анализируются новые объекты, общие для всех приложений Office XP.

Документы, проекты и библиотеки объектов Office XP

Как для пользователей, так и для программистов, работающих в среде Office, основным понятием является документ Office — рабочая книга Excel, документ Word, презентация PowerPoint, база данных Access. Документ представляет собой цель разработки. Частью создаваемого документа является его программный проект. Он появляется в случае необходимости снабдить документ специфическими возможностями, выходящими за стандартные рамки.

Для программистов полезна и другая интерпретация, основанная на понятии каркаса, — Framework. Совокупность библиотек объектов Office XP составляет каркас документов — Framework Documents. Всякий раз, когда создается новый документ Office XP, в зависимости от его типа из общего каркаса выбираются библиотеки, составляющие каркас данного документа — Framework Document. Например, при создании нового документа Word в его каркас по умолчанию входят следующие библиотеки:

  • Office 10.0 Object Library, содержащая классы общих объектов Office XP;
  • Stdole, объекты которой поддерживают Ole Automation (называемую также автоматизацией. — Прим. ред.);
  • VBA, содержащая объекты VBA и поддерживающая вызовы всех стандартных функций VBA;
  • Word 10.0 Object Library — объекты этой библиотеки определяют специфику документа Word.

Из объектов, входящих в каркас документа, и строится начальная заготовка документа, его остов (Sceleton). Благодаря большому числу объектов, входящих в остов, все офисные документы изначально обладают мощной функциональностью. В процессе работы с документом к его каркасу могут подключаться новые библиотеки. Так, например, когда в программный проект впервые вставляется форма, то в каркас автоматически добавляется библиотека MSForms, объекты которой задают как саму форму, так и элементы управления, размещаемые на форме.

Офисному программисту доступны в проекте все объекты из библиотек, подключенных к каркасу. При необходимости он может легко расширить каркас документа, подключив новые библиотеки из общего каркаса.

В начало В начало

Общность и схожесть объектов

У всех документов Office XP есть много общего: единый интерфейс, справочная система, среда программирования. Единый каркас для всех документов — вот что позволяет достичь этой цели. Например, три вышеупомянутые библиотеки — Office, stdole, VBA — подключаются ко всем документам Office XP: Word, Excel, Access, Power Point, Outlook. Таким образом, объекты этих библиотек являются общими для всех офисных документов. Впрочем, общими являются также объекты MSForms, VBIDE и других библиотек. По сути, специфику каждого приложения определяет лишь одна библиотека, имя которой совпадает с именем приложения. Но и в этих библиотеках очень много объектов со схожим поведением, у которых совпадают многие свойства, методы и события.

Каждый раз с появлением новой версии Office добавляются новые библиотеки, например библиотеки с объектами ADO и OWC в Office 2000, а также добавляются новые объекты в новые версии существующих библиотек, новые свойства и методы существующих объектов. Новые объекты соответственно определяют новые возможности версии. Давайте рассмотрим новинки объектной модели Office XP и начнем рассмотрение с объектов, общих для всех приложений.

В начало В начало

Microsoft Office 10.0 Object Library

Ето одна из основных библиотек, содержащих общие объекты Office XP. Ее классы задают инструментальные панели (коллекция CommandBars), справочную систему (класс Assistant и связанные с ним классы), средства поиска файлов (класс SearchFile) и многие другие свойства документов Office XP. В Office 2000 к четырем группам объектов, определяющим справочную систему, инструментальные панели, поиск файлов и свойства документа, добавились шесть групп: мастер ответов, COM-расширения, HTML-проект, объекты Script, языковые предпочтения и шрифты Web-страниц. А в Office XP в эту библиотеку добавились еще шесть групп объектов, позволяющих вести:

  • поиск, открытие и сохранение файлов в диалоговом режиме. В эту группу входят четыре объекта: FileDialog, FileDialogFilter, FileDialogFiters, FileDialogSelectedItems;
  • поиск, открытие и сохранение файлов в программном режиме. К существовавшему ранее объекту FileSearch добавились еще шесть объектов, облегчающих работу с файлами: FileTypes, SearchScope, SearchScopes, SearchFolders, ScopeFolder, ScopeFolders;
  • работу с внешними источниками данных. В эту группу входят пять объектов: OfficeDataSourceObject, ODSOFilter, ODSOFilters, ODSOColumn, ODSOColumns;
  • организацию цифровой подписи. В этой группе два объекта — Signature и SignatureSet;
  • пересылку документа по электронной почте — объект MsoEnvelope;
  • работу с новыми документами — объект NewFile.

Рассмотрим подробно работу каждой группы объектов.

В начало В начало

Поиск, открытие и сохранение файлов в диалоговом режиме

Начнем с предыстории. Раньше у программиста было два способа организации поиска нужного файла. Можно было искать файл чисто программным путем, используя для этого во всех документах общий объект FileSearch. Другой путь состоял в том, чтобы выполнить эту работу в сотрудничестве с пользователем, открывая соответствующее диалоговое окно. Для работы с диалоговыми окнами в каждом приложении существовала своя коллекция Dialogs. Объекты Dialog были схожими, хотя и различались в деталях.

В Office XP сделан шаг вперед по пути унификации и появились общие объекты, позволяющие работать с четырьмя типами диалоговых окон. А теперь — подробности. Во всех приложениях Office XP у соответствующего объекта Application появилось новое свойство FileDialog, возвращающее одноименный объект. При вызове свойства указывается соответствующая константа, определяющая тип объекта FileDialog и тип диалогового окна. Тип определяет, что можно делать в соответствующем окне:

  • искать файлы с автоматическим запоминанием путей к выбранным файлам. Можно задать фильтры на разыскиваемые файлы. Фильтры простые — они позволяют задать расширения, ограничивая тем самым тип разыскиваемых файлов. Можно задать каталог, в котором будет вестись поиск файлов. Можно разрешить множественный выбор из показанных в окне файлов. Можно задать дополнительные свойства окна, позволяя, например, при просмотре документов видеть список их свойств, а при просмотре графических файлов видеть соответствующую картинку. Пути ко всем выбранным в окне файлам автоматически запоминаются в соответствующей коллекции, что позволяет работать с ними программно;
  • искать файл с автоматическим запоминанием папки, содержащей выбранный файл. Те же свойства, что и в предыдущем случае, за исключением того, что множественный выбор недопустим и запоминается папка, содержащая файл;
  • открывать файлы. Поскольку каждое приложение Office XP может открывать файлы только своего типа, то фильтры в этом случае задаются автоматически. Поэтому задавать собственные фильтры, как в двух предыдущих случаях, нельзя, а можно лишь менять порядок применения фильтров. Множественный выбор и одновременное открытие группы файлов разрешены. Прежде чем открыть файлы, указанные пользователем, можно провести программную проверку корректности данной операции в данном контексте;
  • сохранять файл. Те же свойства, что и в предыдущем случае, за исключением того, что множественный выбор недопустим и сохраняется единственный файл.

Объект FileDialog существует в единственном экземпляре. Объект имеет два метода: метод Show открывает диалоговое окно, а метод Execute, применяемый только к двум последним типам окон, выполняет действия, указанные пользователем. Между вызовами этих двух методов можно предусмотреть проверку корректности заданных пользователем действий — разрешено ли, например, открывать файлы, созданные в прошлом году. Свойства объекта FileDialog служат для управления процессом поиска нужных файлов. Булево свойство AllowMultiSelect позволяет задать или отменить множественный выбор файлов. Обратите внимание, эти указания не действуют на второй и и четвертый тип окон. Свойство Filters возвращает одноименную коллекцию объектов Fiter, каждый из которых задает фильтр для поиска файлов. Фильтры добавляются в коллекцию методом Add, а метод CLear позволяет очистить коллекцию. Метод Add применим только для первых двух типов окон. Когда создается объект FileDialog, то автоматически устанавливается коллекция фильтров, зависящая от типа объекта. Свойство FilterIndex позволяет указать, какой фильтр из коллекции будет применяться первым. При помощи свойства InitialFileName задается каталог поиска. Свойство SelectedItems возвращает одноименную коллекцию, доступную только для чтения. Коллекция создается автоматически, фиксируя выбор пользователя. Элементы этой коллекции являются строками, хранящими путь к выбранным файлам.

Подробные примеры программной работы со всеми типами окон можно посмотреть в полном тексте статьи, размещенной на CD-rom. В заключение взгляните, как выглядит диалоговое окно первого типа (рис. 1).

В начало В начало

Поиск, открытие и сохранение файлов в программном режиме

Общий объект FileSearch, позволяющий вести поиск файлов, существовал и в предыдущих версиях Office. В Office 2000 его возможности существенно расширились. В отличие от вышеописанного объекта FileDialog, где фильтры позволяют задать ограничение лишь на тип файлов, объект FileSearch позволяет задать достаточно сложные критерии поиска. Так, например, можно разыскивать файлы определенных размеров, созданных в заданный период, созданных неким автором, искать файл, в заголовке или в тексте которого содержится заданная строка. При этом, заметьте, полнотекстовый поиск допускает возможность учета словоформ. Так что, казалось бы, расширять возможности поиска уже некуда. Однако в Office XP были сделаны довольно существенные и полезные добавления. Связаны они с уточнением области поиска, то есть тех каталогов, в которых разыскивается файл. Два новых объекта — ScopeFolder и коллекция ScopeFolders, вложенных друг в друга, рекурсивно позволяют описать дерево каталогов. Объект ScopeFolder задает папку, а коллекция ScopeFolders задает содержащиеся в ней подпапки. Свойства Name и Path объекта ScopeFolder позволяют получить имя и путь к папке.

А теперь выясним, как связаны объекты ScopeFolder и ScopeFolders с объектом FileSearch, как можно получить корень дерева каталогов и что может служить корнем. У объекта FileSearch появилось новое свойство — SearchScopes, возвращающее одноименную коллекцию, насчитывающую четыре элемента, тип которых задается соответствующей константой. Каждый объект SearchScope из этой коллекции имеет свойство ScopeFolder, возвращающее объект ScopeFolder, который представляет собой папку, лежащую в корне дерева каталогов. В зависимости от типа можно рассматривать дерево каталогов локального компьютера, дерево сетевых папок, папок Outlook. Последний тип позволяет работать с пользовательским деревом каталогов (замечу, что я пока не умею работать с этим типом дерева каталогов). Если задать тип дерева каталогов локального компьютера, то коллекция ScopeFolders на верхнем уровне будет определять диски компьютера — «a:», «c:», «d:» и т.д. Хотя возможность исследования дерева каталогов полезна и сама по себе, но более важно здесь то, что в процессе обхода дерева можно добавлять папки (объекты ScopeFolder) в коллекцию SearchFolders. Для этой цели у объекта ScopeFolder есть метод — AddToSearchFolders. Другой, эквивалентный, метод пополнения коллекции SearchFolders состоит в использовании метода Add самой коллекции. В качестве аргумента метода задается объект ScopeFolder. Имейте в виду: элементами коллекции SearchFolders являются объекты класса ScopeFolder.

Вы спросите: какую роль в поиске файлов играет коллекция SearchFolders? Она задает дополнительно к свойству LookIn объекта FileSearch область поиска файлов. При выполнении метода Execute объекта FileSearch поиск будет вестиcь в области, заданной как свойством LookIn, так и коллекцией SearchFolders. Если мы хотим, чтобы использовалось только свойство LookIn, то соответствующая коллекция должна быть пустой; если хотим ограничиться только областью, заданной коллекцией, то свойство LookIn должно указывать на папку, содержащуюся в коллекции. Важно понимать, что коллекция SearchFolders — одна на все приложение. Содержимое ее сохраняется после поиска. Более того, у коллекции нет метода Clear для ее чистки; метод NewSearch объекта FileSearch тоже не чистит эту коллекцию, так что при необходимости изменения области поиска чистку коллекции приходится выполнять самостоятельно.

Несколько слов еще о двух новинках объектной модели, связанных с объектом FileSearch. У объекта появился новый метод ReFreshScopes, позволяющий обновить дерево каталогов после его изменения, например после добавления или удаления папок. Коллекция FileTypes, возвращаемая при вызове одноименного свойства, позволяет задать при поиске различные типы разыскиваемых файлов.

В начало В начало

Цифровая подпись документов и проектов

Организации и частные лица, создающие и распространяющие программные продукты, как правило, имеют цифровой сертификат (Digital Cerificate или Digital ID), позволяющий подписывать рассылаемые по электронной почте документы. Технология электронной подписи использует шифрование с открытым ключом и позволяет с высокой степенью вероятности гарантировать, что полученное сообщение не было подменено, изменено, что в нем не появилось вирусов и что авторство источника подтверждено. Office XP использует технологию Microsoft Authenticode, позволяющую подключать цифровую подпись к документам и программным проектам, используя цифровой сертификат. Макросы подписанного документа будут выполняться на компьютере и в том случае, когда установлен высокий уровень безопасности выполнения макросов (конечно, при условии что источник документа внесен в список доверяемых источников).

Как получить цифровой сертификат? Существуют специальные коммерческие организации, занимающиеся выдачей таких сертификатов после соответствующей проверки претендентов. Microsoft рекомендует фирму VeriSign. В корпоративных сетях может существовать собственная служба выдачи сертификатов. Наконец, можно создать собственный сертификат, запустив включенную в состав Office XP программу SelfCert.exe, обычный адрес которой: «c:\Program Files\Microsoft Office\Office10\SELFCERT.exe». Автор, например, таким образом создал собственный сертификат, который не имеет особой силы, поскольку не подтвержден внешними организациями, пользующимися доверием.

Новые объекты Office XP — SignatureSet и Signature — позволяют программно организовать подпись документа. Объект SignatureSet задает коллекцию подписей, связанных с документом. Его метод Add позволяет добавить в коллекцию новую подпись. При выполнении метода открывается диалоговое окно, в котором можно выбрать все доступные сертификаты (рис. 2).

Для того чтобы добавленная подпись стала постоянной, необходимо вызвать еще один метод коллекции SignatureSet — метод Commit. Между вызовами этих двух методов можно организовать проверку свойств добавленной подписи. Элементами коллекции SignatureSet являются объекты Signature. Объекты располагают большим набором свойств, доступных только для чтения, которые и позволяют определить свойства подписи. Булевы свойства AttachCertificate, IsCertificateExpired, IsCertificateRevoked, IsValid указывают на то, присоединена ли подпись к документу, не истек ли ее срок, не отозван ли сертификат, является ли подпись правильной. Свойства SignDate и ExpireData возвращают дату подписи документа и дату истечения срока сертификата. Свойства Issuer и Signer задают создателя сертификата и его владельца, подписывающего документ. Единственный метод объекта Signature — метод Delete — позволяет удалить объект из коллекции и соответственно удалить подпись из документа.

Примеры работы с этими объектами приведены в полном тексте статьи. На этом можно было бы закончить описание данных объектов, если бы не одно важное замечание: работать с этими объектами можно пока только в приложении Word. В этом приложении объект Document имеет свойство Signatures, возвращающее коллекцию SignatureSet. Во всех остальных приложениях, видимо, забыли добавить такое свойство к объектам, задающим соответствующий документ. Поэтому хотя описать такие объекты, например в Excel, возможно, но до них никак нельзя добраться. Следовательно, подписывать документы во всех приложениях Office XP, за исключением Word, можно только вручную, а не программно. Программно можно лишь проверить, подписан ли документ. В Excel для этого у объекта WorkBook, задающего документ, есть булево свойство VBASigned, возвращающее True, если документ подписан, причем «настоящим», а не собственным сертификатом. Скорее всего, свойство Signatures в скором времени появится у всех объектов, задающих документы Office XP.

В начало В начало

Почему нельзя работать с объектом OfficeDataSourceObject

Для работы с внешними источниками данных добавлены пять объектов: OfficeDataSourceObject, ODSOFilter, ODSOFilters, ODSOColumn, ODSOColumns, первый из которых играет ключевую роль. Его свойство ConnectString позволяет задать строку соединения с источником данных, а метод Open позволяет соединиться с источником и получить необходимые данные. Свойство Filters возвращает одноименную коллекцию, элементы которой задают фильтры, применяемые при чтении данных. Свойство Columns возвращает одноименную коллекцию, элементы которой определяют поля данных. Во многом этот объект напоминает объект ADO RecordSet.

Таковы, по-видимому, были благие намерения разработчиков, вводивших эту группу объектов. Однако намерения эти не были должным образом реализованы. Поэтому объекты данной группы следует считать скорее держателями места (PlaceHolders), чем реальными объектами, с которыми действительно можно работать. Начну с того, что получить центральный объект этой группы — OfficeDataSourceObject — просто невозможно. Ни в одном из приложений Office XP ни у объектов Application, ни у объектов, задающих документы, нет свойств, возвращающих этот объект. Что касается документации, то она также крайне неудачна: приведенные примеры не работают, не могут работать и написаны достаточно безграмотно. В документации упоминаются также несуществующие свойства объектов. Видимо, эту группу объектов следует рассматривать как заявку на будущее.

По нашему мнению, эти объекты следует вообще исключить, поскольку существует более универсальная группа объектов ADO, широко применяемая и позволяющая решать все задачи, связанные с доступом к внешним источникам данных самой разной природы. Объекты ADO с успехом могут использоваться при работе с любыми документами Office XP. (В своей книге «Мир объектов Excel 2000» автор достаточно подробно описал эти объекты, а также варианты их использования в Excel и в ASP-страницах Web-узла.)

В начало В начало

Пересылка документа по электронной почте

В мире объектов Office XP существует множество объектов, позволяющих работать с сообщениями электронной почты, в частности пересылать документы как в тексте сообщения, так и в виде присоединения к сообщению. Максимальные возможности предоставляют, конечно, объекты Outlook, но и объекты, представляющие документы других приложений, имеют, в частности, схожие методы SenMail, SendForReview, выполняющие пересылку документа. Теперь появился и общий объект MsoEnvelope, позволяющий пересылать в теле сообщения содержимое активного документа (документ Word, страницу рабочей книги Excel). Этот объект возвращается при вызове свойства MailEnvelope, которым теперь обладают объекты Document, Chart, WorkSheet. Сам объект устроен просто: у него четыре свойства (Item, Introduction, Parent, CommandBars), нет методов, есть два события. Основным является свойство Item, возвращающее объект Outlook — MailItem. Фактически вся реальная работа по пересылке документа осуществляется через этот объект Outlook, поэтому общий объект MsoEnvelope является, по существу, оберткой объекта MailItem. Определенную полезную работу общий объект все же выполняет: он из контента документа автоматически формирует содержимое сообщения, начиная сообщение строкой введения, заданного свойством Introduction. С объектной точки зрения это означает, что автоматически формируется свойство body объекта MailItem, возвращаемого при вызове свойства Item.

Свойство Parent объекта MsoEnvelope традиционно для всех объектов — оно позволяет получить родительский объект. Труднее понять, зачем понадобилось включать в объект свойство CommandBars, возвращающее коллекцию панелей. Эту коллекцию можно было бы получить и напрямую, через общий объект CommandBars. События, EnvelopeHide и EnvelopeShow возникают, когда пользовательский интерфейс, связанный с объектом, соответственно спрятан или показан. В обработчике события Hide можно предпринять необходимые меры для показа этого интерфейса.

В процессе отправки документа в виде сообщения появляются окна с предупреждением о возможной незаконности операции пересылки (рис. 3).

Об объекте NewFile будет рассказано при рассмотрении новинок объектной модели отдельных приложений Office XP. библиотеки общих объектов MS Forms 2.0, Stdole, VBA, VBIDE в Office XP не претерпели изменений.

КомпьютерПресс 5'2002