Опубликован: 12.01.2008 | Уровень: специалист | Доступ: платный | ВУЗ: Мордовский государственный университет имени Н.П. Огарева
Лекция 7:

WSH как средство взаимодействия с внешними программами

< Лекция 6 || Лекция 7: 123 || Лекция 8 >

Использование внешних серверов автоматизации

Одна из наиболее полезных возможностей сценариев WSH – управление работой внешних серверов автоматизации (программ, предоставляющих свои службы и интерфейсы для использования другими приложениями). Самые распространенные и часто используемые серверы автоматизации в Windows – это приложения пакета Microsoft Office. Мы рассмотрим на примерах, каким образом можно выводить из сценариев WSH информацию в две наиболее распространенные программы этого пакета: Microsoft Word и Microsoft Excel.

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

Для того, чтобы использовать из сценариев WSH те возможности, которые поддерживают программы Word и Excel, необходимо знать, какие именно объекты предоставляются для внешнего использования этими серверами автоматизации и как объекты соотносятся друг с другом. Хотя объектные модели различных приложений Microsoft Office довольно сложны, они похожи друг на друга, причем для практических целей достаточно понять принцип работы с несколькими ключевыми объектами. Здесь мы не будем останавливаться на подробном рассмотрении свойств и методов объектов Word и Excel, а лишь кратко упомянем, какие именно объекты будут использоваться в рассмотренных ниже примерах сценариев.

На самом верхнем уровне объектной модели Word находится объект Application, который представляет непосредственно само приложение Word и содержит (в качестве свойств) все остальные объекты. Таким образом, объект Application используется для получения доступа к любому другому объекту Word.

Семейство Documents является свойством объекта Application и содержит набор объектов Document, каждый из которых соответствует открытому в Word документу. Класс Documents понадобится нам в сценариях для создания новых документов. Объект Document содержит в качестве своих свойств семейства различных объектов документа: символов (Characters), слов (Words), предложений (Sentences), параграфов (Paragraphs), закладок (Bookmarks) и т.д.

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

Объектная модель Excel построена по тому же принципу, что и объектная модель Word. Основным объектом, содержащим все остальные, является Application. Напомним, что отдельные файлы в Excel называются рабочими книгами. Семейство Workbooks в Excel является аналогом семейства Documents в Word и содержит набор объектов Workbook (аналог объекта Document в Word), каждый из которых соответствует открытой в Excel рабочей книге. Новая рабочая книга создается с помощью метода Add() объекта Workbooks.

Для доступа к ячейкам активного рабочего листа Excel используется свойство Cells объекта Application. Для получения или изменения значения отдельной ячейки применяется конструкция Cells(row,column).Value, где row и column являются соответственно номерами строки и столбца, на пересечении которых находится данная ячейка.

В Excel, как и в Word, имеется объект Selection, позволяющий работать с выделенным фрагментом электронной таблицы. Самым простым способом выделить диапазон ячеек активного рабочего листа является использование метода Select() объекта Range. Например, выражение Range("A1:C1").Select() позволяет выделить три смежные ячейки: "A1", "B1" и "C1".

Для того, чтобы понять, какой именно объект Word или Excel нужно использовать для решения той или иной задачи, часто проще всего бывает проделать в соответствующем приложении необходимые манипуляции вручную, включив предварительно режим записи макроса. В результате мы получим текст макроса на языке VBA (Visual Basic for Applications), из которого будет ясно, какие методы и с какими параметрами нужно вызывать и какие значения нужно присваивать свойствам объектов. В качестве простой иллюстрации проделаем следующие действия. Запустим Word, запустим Macro Recorder (Сервис|Макрос|Начать запись… (Tools|Macros|Record…)), назовем новый макрос "Пример1" и нажмем на кнопку "Ok". После этого напишем в документе слово "Пример" и прекратим запись макроса. Теперь можно посмотреть содержимое записанного макроса. Для этого нужно выбрать пункт Макросы… (Macroses…) в меню Сервис|Макрос (Tools|Macros), выделить макрос "Пример1" в списке всех доступных макросов и нажать кнопку Изменить (Edit). В открывшемся окне редактора Visual Basic появится текст макроса:

Sub Пример1()
'
' Пример1 Макрос
' Макрос записан 12.09.07 Андрей Владимирович Попов
'
    Selection.TypeText Text:="Пример"
End Sub

Как мы видим, для печати слова в документе был использован метод TypeText объекта Selection.

Макросы в Excel записываются и редактируются аналогичным образом.

Взаимодействие с Microsoft Word

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

  • с помощью метода CreateObject объекта WScript (объектная модель WSH);
  • с помощью конструкции New ActiveXObject (язык JScript);
  • с помощью функции CreateObject (язык VBScript).

В любом случае в используемый метод или функцию в качестве параметра передается программный идентификатор объекта ( ProgID ), заключенный в скобки. Пример на языке VBScript:

Set WA=WScript.CreateObject("Word.Application")

Перед точкой в ProgID стоит имя библиотеки типов (type library) для объекта, которая может существовать как в виде отдельного файла с расширением tlb, так и в виде части файла с исполняемым кодом объекта (библиотека типов, содержащая сведения о COM-объекте, регистрируется в системном реестре при установке приложения, использующего этот объект). После точки в ProgID указывается имя класса, содержащего свойства и методы, доступные для использования другими приложениями.

Выполняя метод CreateObject, интерпретатор сценария через ProgID получает из системного реестра путь к файлам нужной библиотеки типов. Затем с помощью этой библиотеки в память загружается экземпляр запрашиваемого объекта, и его интерфейсы становятся доступными для использования в сценарии. Ссылка на созданный объект сохраняется в переменной; в дальнейшем, используя эту переменную, мы получаем доступ к свойствам и методам объекта, а также к его вложенным объектам (если они имеются).

Примеры управления приложением Microsoft Word из сценариев приведен в листинге 7.6. Сначала создается главный объект Word.Application, который запускает приложение Microsoft Word:

Set WA=WScript.CreateObject("Word.Application")

Затем создается новый пустой документ, в результате в переменную WD заносится ссылка на объект Document:

Set WD=WA.Documents.Add()

Наконец, в переменную Sel заносится ссылка на объект Selection, с помощью которого можно задать тип и размер шрифта, тип выравнивания абзацев и напечатать в документе строки текста:

Set Sel=WA.Selection;

В результате выполнения сценария PrintInWord.vbs в новом документе Microsoft Word печатаются две строки текста, после чего с помощью метода PrintOut объекта Document содержимое документа выводится на принтер:

WD.PrintOut();
'*******************************************************************
' Имя: PrintInWord.vbs
' Язык: VBScript
' Описание: Использование из сценария внешнего объекта
'           автоматизации (Microsoft Word)
'*******************************************************************
Option Explicit

Dim WA,WD,Sel  ' Объявляем переменные
'Создаем объект¬–приложение Microsoft Word
Set WA=WScript.CreateObject("Word.Application")
' Можно было использовать конструкцию
' Set WA=CreateObject("Word.Application")

Set WD=WA.Documents.Add  'Создаем новый документ (объект Document)
WA.Visible=true  ' Делаем Word видимым
Set Sel=WA.Selection  'Создаем объект Selection
Sel.Font.Size=14 'Устанавливаем размер шрифта
Sel.ParagraphFormat.Alignment=1  'Выравнивание по центру
Sel.Font.Bold=true  'Устанавливаем полужирный шрифт
Sel.TypeText "Привет!" & vbCrLf  'Печатаем строку текста
Sel.Font.Bold=false  'Отменяем полужирный шрифт
Sel.ParagraphFormat.Alignment=0  'Выравнивание по левому краю
'Печатаем строку текста
Sel.TypeText "Эти строки напечатаны с помощью WSH."
WD.PrintOut   'Выводим документ на принтер
'*************  Конец *********************************************
Листинг 7.6. Использование сервера автоматизации Microsoft Word (VBScript)
Взаимодействие с Microsoft Excel

В качестве примера управления сервером автоматизации Microsoft Excel рассмотрим сценарий PrintInExcel.vbs (листинг 7.7). Как и в случае с Microsoft Word, здесь сначала создается главный объект Excel.Application, который запускает приложение Microsoft Excel:

Set XL=WScript.CreateObject("Excel.Application")

Затем открывается новая рабочая книга:

XL.WorkBooks.Add

Ширина первого и второго столбца делается равной 40 пунктам, а третьей – 10 пунктам:

'Устанавливаем нужную ширину колонок
XL.Columns(1).ColumnWidth = 40
XL.Columns(2).ColumnWidth = 40
XL.Columns(3).ColumnWidth = 10

В столбцы первой строки записываются обозначения столбцов ("Фамилия", "Имя", "Телефон"), причем данный текст выделяется полужирным шрифтом:

'Печатаем в ячейки текст
XL.Cells(1,1).Value="Фамилия"
XL.Cells(1,2).Value="Имя"
XL.Cells(1,3).Value="Телефон"
'Выделяем три ячейки
XL.Range("A1:C1").Select
'Устанавливаем полужирный текст для выделенного диапазона
XL.Selection.Font.Bold = true
Во вторую строку заносятся данные для каждого столбца:
'Печатаем в ячейки текст
XL.Cells(2,1).Value="Иванов"
XL.Cells(2,2).Value="Иван"
XL.Cells(2,3).Value="555555"
'*******************************************************************
' Имя: PrintInExcel.vbs
' Язык: VBScript
' Описание: Использование из сценария внешнего объекта
'           автоматизации (Microsoft Excel)
'*******************************************************************
Option Explicit
                            	
Dim XL  ' Объявляем переменные

'Создаем объект-приложение Microsoft Excel	
Set XL=WScript.CreateObject("Excel.Application")
'Делаем окно Microsoft Excel видимым
XL.Visible=true
'Открываем новую рабочую книгу
XL.WorkBooks.Add
'Устанавливаем нужную ширину колонок
XL.Columns(1).ColumnWidth = 40
XL.Columns(2).ColumnWidth = 40
XL.Columns(3).ColumnWidth = 10
'Печатаем в ячейки текст
XL.Cells(1,1).Value="Фамилия"
XL.Cells(1,2).Value="Имя"
XL.Cells(1,3).Value="Телефон"
'Выделяем три ячейки
XL.Range("A1:C1").Select
'Устанавливаем полужирный текст для выделенного диапазона
XL.Selection.Font.Bold = true
'Печатаем в ячейки текст
XL.Cells(2,1).Value="Иванов"
XL.Cells(2,2).Value="Иван"
XL.Cells(2,3).Value="555555"
'*************  Конец *********************************************
Листинг 7.7. Использование сервера автоматизации Microsoft Excel (VBScript)
< Лекция 6 || Лекция 7: 123 || Лекция 8 >
Валентина Тюрина
Валентина Тюрина

Вопрос по лекции 7, где рассматривается взаимодействие со сторонними программами, в том числе эмуляция нажатия кнопок клавиатуры WshShell.SendKeys.

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

Можно вытащить информацию о объекте (кнопке) скажем с помощью AutoIt Info, или ориентироваться скажем на текст на кнопке..., но как на эту кнопку нажать? (без обхода по клавиатуре)

Александр Тагильцев
Александр Тагильцев

Где проводится профессиональная переподготовка "Системное администрирование Windows"? Что-то я не совсем понял как проводится обучение.

Михаил Байков
Михаил Байков
Россия, Москва, Московский Авиационный Институт, 2009
Алексей Хохлов
Алексей Хохлов
Россия, Балашиха