Эффективная автоматизация процессов в Microsoft Word

Настоящая статья посвящена теме, может быть, и не новой, но, как показывают письма читателей, по-прежнему актуальной — автоматизации приложений Microsoft Office. Многие разработчики в процессе работы над своими проектами (неважно, с помощью какого средства разработки — Delphi, C++Builder, Visual Basic…) нередко применяют сервисы, предоставляемые Microsoft Office, например построение сводных таблиц и диаграмм с помощью Microsoft Excel, генерацию и печать документов с помощью Microsoft Word и т.д.

Нередко пользователи, привыкшие использовать приложения Microsoft Office в повседневной работе, сами настаивают на применении в приложениях таких сервисов либо просто на сохранении отчетов и других документов в одном из форматов Microsoft Office. Отметим, что потенциальные пожелания подобного рода компанией Microsoft учтены достаточно давно — практически все, что в состоянии сделать пользователь любого приложения Microsoft Office с помощью меню, клавиатуры и инструментальной панели, может быть произведено и автоматически, то есть либо из VBA-программы, либо из приложения, созданного с помощью одного из средств разработки.

Иными словами, приложения Microsoft Office являются программируемыми. Программируемость в общем случае означает возможность управления данным приложением с помощью макроязыков либо с помощью других приложений.

Все компоненты Microsoft Office поддерживают один и тот же макроязык: Visual Basic for Applications (VBA), позволяющий создавать приложения непосредственно внутри документов Office (это называется «решения на базе Microsoft Office»). Управление же компонентами Office из других приложений осуществляется с помощью автоматизации (Automation, ранее — OLE Automation) — все приложения Microsoft Office являются серверами автоматизации (или COM-серверами). Для создания таких приложений пригодны любые средства разработки, позволяющие создавать контроллеры автоматизации (COM-клиенты). Наиболее часто для этой цели используется Visual Basic, но это могут быть и Delphi, и C++Builder, и Visual C++. Однако прежде чем обсуждать возможности тех или иных средств разработки, следует разобраться, что такое автоматизация.

Коротко об автоматизации

Автоматизация — это одна из возможностей, предоставляемых технологией Microsoft COM (Component Object Model). Не вдаваясь в подробности реализации этой технологии, заметим, что она используется приложениями (называемыми COM-серверами) для предоставления доступа к их объектам, а также к свойствам и методам этих объектов другим приложениям (называемым COM-клиентами), каковыми могут быть и средства разработки.

Например, текстовый процессор, будучи COM-сервером, может предоставлять другим приложениям доступ к документу, абзацу, закладке с помощью соответствующих объектов. Для именования (и опознания) COM-серверов обычно используются специальные строковые обозначения — программные идентификаторы (Programmatic Identifier, ProgID). Они нужны для того, чтобы операционная система могла с помощью этих идентификаторов определить, в каком именно каталоге (или на каком компьютере локальной сети, если используется тот или иной способ удаленного доступа к серверу) расположен исполняемый файл сервера автоматизации, и запустить его на выполнение. О том, какие именно программные идентификаторы применяются для того или иного приложения Microsoft Office, будет сказано в разделах, посвященных этим приложениям.

Объекты автоматизации с точки зрения программирования мало чем отличаются от обычных объектов, знакомых нам из теории и практики объектно-ориентированного программирования. Как и обычные объекты, они обладают свойствами и методами. Свойство — это характеристика объекта; например, свойством абзаца (объект Paragraph) может быть его стиль (Style). Методом называется действие, которое можно выполнить с объектом (например, можно сохранить документ с помощью метода SaveAs объекта Document).

Нередко серверы автоматизации содержат наборы однотипных объектов, называемых коллекциями. Например, текстовый процессор может содержать коллекцию документов, а каждый документ — коллекцию абзацев.

Как узнать, какие объекты доступны в серверах автоматизации? Для этой цели в комплект поставки любого сервера автоматизации входит документация и файлы справки, описывающие их объектную модель. Если брать приложения Microsoft Office 2000, то это справочные файлы для программистов на Visual Basic for Applications VBAxxx9.CHM (для Microsoft Office 97 — VBxxx8.HLP соответственно). Отметим, что по умолчанию они не устанавливаются, так как нужны разработчикам, а не рядовым пользователям.

Вся информация об объектах, необходимая контроллерам автоматизации, содержится в библиотеках типов. Библиотеки типов хранятся в специальном бинарном формате и обычно представлены в виде файлов с расширениями *.olb или *.tlb, а также могут содержаться внутри исполняемых файлов (*.exe) или динамически загружаемых библиотек (*.dll). Библиотеки типов можно просматривать с помощью утилиты OleView, входящей в состав Microsoft Platform SDK, а средства разработки фирмы Borland содержат свои собственные утилиты просмотра библиотек типов.

Заканчивая это более чем краткое введение в автоматизацию, остановимся также на понятии связывания. Связыванием называется способ, с помощью которого переменная или класс приложения-контроллера ссылается на объект автоматизации. Таких способов существуют два: позднее связывание и раннее связывание.

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

Раннее связывание означает, что реальная ссылка на объект автоматизации появляется уже на этапе компиляции. Поэтому в коде приложения-контроллера требуется ссылка на библиотеку типов (или на специальный модуль, являющийся интерфейсом к ней), и это приводит к генерации в этом приложении классов с теми же свойствами и методами, что и у объектов автоматизации, что делает возможными синтаксическую проверку имен методов на этапе компиляции и доступ к именованным константам, содержащимся в библиотеке типов. Отметим, однако, что далеко не все средства разработки, поддерживающие позднее связывание, осуществляют также поддержку раннего связывания.

Закончив экскурс в COM и автоматизацию, вернемся к вопросу о том, какие средства разработки удобно применять для создания контроллеров автоматизации.

VBA и средства разработки контроллеров автоматизации

Как уже было сказано выше, контроллеры автоматизации можно создавать с помощью различных средств разработки, и если вы уже используете какое-либо из инструментальных средств, поддерживающих создание контролеров автоматизации, можно именно им и воспользоваться. Единственное, что следует сделать — это узнать, поддерживается ли вашим средством разработки ранее связывание, если вы планируете его использовать. Примеры простейших контроллеров автоматизации (как правило, для Microsoft Word или Microsoft Excel), дающие представление о том, как вызываются методы сервера, обычно можно найти в комплекте поставки большинства современных средств разработки.

Освоение объектной модели автоматизируемого сервера можно начать с записи необходимой последовательности действий в виде макроса с помощью VBА. Создать макрос можно, выбрав из меню приложения Microsoft Office пункт Tools | Macro |Record New Macro. Просмотр полученного макроса в редакторе кода VBA обычно позволяет понять, как должен выглядеть код, реализующий эту последовательность действий.

Обсудив возможные средства разработки контроллеров автоматизации, можно наконец перейти к самим приложениям Microsoft Office, к их объектным моделям и к их использованию. В качестве средства разработки для приведенных ниже примеров используется Borland Delphi 5, но поскольку в них приводится последовательность вызова свойств и методов объектов Microsoft Office, перенос кода на другие языки программирования не должен вызвать особых затруднений. Если специально не оговорено, в данной статье во всех примерах используется раннее связывание.

Объектные модели Microsoft Office

Как было сказано выше, приложения Microsoft Office предоставляют контроллерам автоматизации доступ к своей функциональности с помощью своей объектной модели, представляющей собой иерархию объектов. Объекты могут предоставлять доступ к другим объектам посредством коллекций.

В качестве иллюстрации того, как выглядит иерархия объектов Microsoft Office, приведем небольшой фрагмент объектной модели Microsoft Word (рис.1):

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

  1. Свойство Visible (доступное для объекта Application всех приложений Microsoft Office) позволяет приложению появиться на экране и в панели задач; оно принимает значения True (пользовательский интерфейс приложения доступен) или False (пользовательский интерфейс приложения недоступен; это значение устанавливается по умолчанию). Если вам нужно сделать что-то с документом Office в фоновом режиме, не информируя об этом пользователя, можно не обращаться к этому свойству — в этом случае приложение можно будет найти только в списке процессов с помощью приложения Task Manager.
  2. Метод Quit закрывает приложение Office. В зависимости от того, какое приложение Office автоматизируется, он может иметь параметры или не иметь таковых.

Общие принципы создания контроллеров автоматизации

В общем случае контроллер автоматизации должен выполнять следующие действия:

  1. Проверить, запущена ли копия приложения-сервера.
  2. В зависимости от результатов проверки запустить копию автоматизируемого приложения Office либо подключиться к уже имеющейся копии.
  3. Сделать окно приложения-сервера видимым (в общем случае это не обязательно).
  4. Выполнить какие-то действия с приложением-сервером (например, создать или открыть документы, изменить их данные, сохранить документы и пр.)
  5. Закрыть приложение-сервер, если его копия была запущена данным контроллером, или отключиться от него, если контроллер подключился к уже имеющейся копии.

Соответствующий код для Delphi представлен в листинге 1.

Здесь мы воспользовались функциями GetActiveOleObject и CreateOleObject для подключения к уже запущенной копии приложения-сервера или запуска новой, если сервер не запущен, что приводит к тому, что в вариантную переменную помещается ссылка на объект Application соответствующего сервера.

Приведенная часть кода контроллера в других средствах разработки может выглядеть по-другому — она не имеет прямого отношения к методам объектов Office, так как обусловлена правилами вызова стандартных функций OLE в Delphi (за исключением вызовов методов Visible и Quit объекта Application). А вот все то, что должно быть вставлено вместо комментария «Здесь выполняются другие действия с объектами приложения Office», в разных средствах разработки должно выглядеть более или менее однотипно — используя созданную вариантную переменную, мы манипулируем методами и свойствами объекта Application.

В заключение сделаем одно маленькое замечание касательно числа параметров методов объектов автоматизации. В случае применения позднего связывания число указанных в коде параметров метода не обязано совпадать с их истинным числом (которое можно найти в описании объектной модели соответствующего приложения). В этом случае вполне допустимым является следующий код:

несмотря на то что метод Quit объекта Application в случае некоторых приложений Microsoft Office (например, Microsoft Word) имеет параметры.

При использовании же раннего связывания, например при создании контроллеров с помощью Delphi, следует более строго подходить к определению параметров — их число и тип должны соответствовать описанию методов в библиотеке типов. Например, в случае раннего связывания корректный код на Delphi для закрытия документа Word со значениями всех параметров по умолчанию будет иметь вид:

App.Quit(EmptyParam, EmptyParam, EmptyParam);

Исключением из этого правила является Visual Basic — это средство разработки позволяет не задумываться о числе параметров методов при написании кода.

Обсудив общие принципы создания контроллеров автоматизации и узнав, как это делается средствами Borland Delphi, мы можем перейти к рассмотрению автоматизации конкретных приложений Microsoft Office. Начнем с одного из самого популярных компонентов этого пакета — с Microsoft Word.

Автоматизация Microsoft Word

В данном разделе мы обсудим наиболее часто встречающиеся задачи, связанные с автоматизацией Microsoft Word. Но перед этим рассмотрим, каковы программные идентификаторы основных объектов Microsoft Word и что представляет собой его объектная модель.

Программные идентификаторы и объектная модель Microsoft Word

Для приложения-контроллера доступны непосредственно следующие объекты:

Как автоматизировать работу с документами. Пошаговая инструкция и шаблоны

По опыту знаем, что меньше всего времени хочется тратить на обработку и заполнение типовых документов. Договоры, приложения и дополнительные соглашения – работу с ними можно автоматизировать. В этой статье расскажем, как без помощи сторонних сервисов ускорить процесс заполнения документов и поделимся готовыми шаблонами.

Способ №1. Режим «Разработчик»

Инструмент: Microsoft Word

Как создать:

Режим разработчика в Microsoft Word позволяет создавать динамические формы, которые могут автоматически заполняться данными.

Что нужно сделать:

1. На вкладке «Файл» перейдите в раздел «Параметры» – «Настроить ленту».

Как автоматизировать работу с документами. Пошаговая инструкция и шаблоны

2. В разделе «Настроить ленту» установите флажок «Разработчик».

Как автоматизировать работу с документами. Пошаговая инструкция и шаблоны

3. После активации этой вкладки будут доступны такие элементы управления как текстовые поля, выпадающие списки, поля с выбором даты и пр. Эти инструменты можно использовать для заполнения соответствующих полей внутри документа

Как автоматизировать работу с документами. Пошаговая инструкция и шаблоны

Рассмотрим автоматизацию на примере заполнения номера дополнительного соглашения.

1. В месте, где нам нужно подставить данные, выбираем вкладку «Элемент управления содержимым «форматированный текст». Появится соответствующее поле с местом для ввода текста.

Как автоматизировать работу с документами. Пошаговая инструкция и шаблоны

2. Активируем режим «Режим конструктора» и выбираем вкладку «Свойства». В этой вкладке можно указать название элемента, которое будет отображаться в виде подсказки. По желанию можно выбрать другие опции.

Как автоматизировать работу с документами. Пошаговая инструкция и шаблоны

3. Нажимаем «ОК», прописываем необходимые данные и выходим из режим конструктора. В итоге получаем элемент управления с подсказкой для заполнения.

Как автоматизировать работу с документами. Пошаговая инструкция и шаблоны

4. Если необходимо добавить поле с выбором даты или выпадающего списка, то выбираем соответствующий элемент управления и вносим в него изменения по аналогии с описанием выше.

Если необходимо создать поле, содержимое которого будет повторяться несколько раз по тексту, можно воспользоваться инструментом «Экспресс-блоки». Для этого нажимаем вкладку «Вставка» – «Экспресс-блоки» – «Свойства документа» и выбираем стандартный блок.

Как автоматизировать работу с документами. Пошаговая инструкция и шаблоны

После этого редактируем блок через режим конструктора и копируем его в то место, где содержимое блока должно повторяться.

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

Способ №2. Слияние Word и Excel

Инструменты: Microsoft Word, Microsoft Excel

Разместите тендер бесплатно

Наша система сама подберет вам исполнителей на услуги, связанные с разработкой сайта или приложения, поисковой оптимизацией, контекстной рекламой, маркетингом, SMM и PR.

Заполнить заявку 12348 тендеров проведено за восемь лет работы нашего сайта.

Как создать:

Слияние документов позволяет автоматически заполнять шаблоны данными из таблиц Excel. Этот метод идеально подходит для массового создания документов, таких как письма, отчеты или накладные.

Давайте рассмотрим на примере нашего дополнительного соглашения.

Что нужно сделать:

1. Создайте таблицу в Excel и заполните необходимыми данными. Убедитесь, что первая строка содержит заголовки столбцов, которые будут использоваться в самом документе.

Как автоматизировать работу с документами. Пошаговая инструкция и шаблоны

2. Закройте файл в Excel, откройте в Word, перейдите на вкладку «Рассылки» – «Начать слияние» – «Пошаговый мастер слияния»

Как автоматизировать работу с документами. Пошаговая инструкция и шаблоны

3. Далее пошагово выбираем: «Письма» – «Текущий документ» – «Использование списка» и выбираем уже созданный документ в Excel.4. Нажимаем кнопку «Вставить поле слияния» и выбираем, какие данные из Excel будут перенесены в конкретные места документа.

Как автоматизировать работу с документами. Пошаговая инструкция и шаблоны

5. Нажимаем «Просмотреть результаты» и выбираем строку, данные которой хотим подгрузить из Excel. Информация мгновенно выгружается в Word, подставляя предзаполненные значения.

Как автоматизировать работу с документами. Пошаговая инструкция и шаблоны

Способ №3. Макрос

Инструменты: Microsoft Word,

Как создать:

Если вы владеете навыками программирования на VBA, то можно написать макрос. Внешне макрос работает примерно так же, как и инструмент слияния word и excel: необходимо заполнить данные в отдельном файле, после чего выгрузить их в автозаполняемые формы дополнительного соглашения.

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

Как автоматизировать работу с документами. Пошаговая инструкция и шаблоны

Если было полезно, подписывайтесь на телеграм-каналы:

@runetlex – в нем делимся опытом решения юридических задач digital-агентств и ИТ-бизнеса.

@ilovedocs – канал управляющего партнера Рунетлекс Павла Мищенко о юридическом бизнесе, понятности документов и жизненном опыте.

@ilovedocs – мой канал о юридическом бизнесе, понятности документов и жизненном опыте.

Оцените статью
InternetDoc.ru
Добавить комментарий