"Computer newspaper" - "Компьютерная газета" №33, 1999 год

Register now - Попробуй заработать
Get your 39$ - Получи чек! | FREE web site and $20 cash over & over!

At title page - НаверхReturn at title page - Возврат на основную страницу

Применение OLE – от простого к сложному.

Если Вы не только программист, но и творческая личность, вероятно Вы не раз обращали внимание, что Вашим программам не хватает функций по обработке текста, как в MS Word, гибкости в обработке различных типов данных в одной таблице, как в Excel, печати разнообразных отчётов, как в этих программах. Всё это является результатом многолетнего труда тысяч программистов и одному его не повторить. Можно ли это заставить работать в других программах?

Здесь и работает технология Object Linking and Embedding – объектное связывание и внедрение. Прямым назначением механизма OLE является доступ к объектам из внешних программ.

Практически каждый уважающий себя пользователь использует OLE, вставляя картинки в документы Word и диаграммы в таблицы Excel. Кто слегка покруче, тот вставляет таблицы и документы друг в друга либо использует слияние документов.

Точно таким же образом, весьма полезным применением Office 97 может стать использование его объектов в Ваших программах. OLE - объектами являются не только MS Graph или Equation или WordArt, но и сами приложения Office – Word, Excel, Access, PowerPoint, . . . Поэтому всё разнообразие возможностей Office открыто для всех желающих.

Например, Вы можете создать объект-наследник от “Excel.Application” и вызывать методы этого объекта в своей программе. В таком случае, Ваше приложение станет гордо именоваться OLE-клиентом. При этом Excel запустится как OLE-сервер, а вызовы методов будут транслироваться в вызовы функций OLE-сервера. Это можно применить, в частности, для передачи данных и формирования отчётов своей программой внутри Excel, при этом Вам будет совершенно безразлично, как он это реализует и какова структура его электронных таблиц.

Допустим Вы работаете в СУБД Visual FoxPro. Создайте новую программу (через меню “File/New”, далее выберите “Program” и “New File”) и сохраните ее под именем “UsingOLE.PRG”. Краткий пример программы будет выглядеть следующим образом:

proc usingOLE

*создание объекта
MyObject= CREATEOBJECT("Excel.Application")

*инициализация объекта - запуск Excel.
MyObject.Run

*сделать окно Excel видимым - необязательно.
MyObject.Visible=.t.

*** Работа с объектом ***

*Открытие существующей книги
MyObject.Workbooks.Open("C:\Мои документы\Учёт тепла.xls")

*Закрытие активной книги
MyObject.ActiveWindow.Close

*Создание новой
MyObject.Workbooks.Add

*Перенос данных в ячейку C7
MyObject.Range("C7").Value = 1234

*Выбор ячейки C8
MyObject.Range("C8").Select

*Присваивание формулы либо значения
MyObject.ActiveCell.FormulaR1C1 = "4321"
MyObject.Range("C9").FormulaR1C1 = "=SUM(R[-2]C:R[-1]C)"

*Сохранение под другим именем
MyObject.ActiveSheet.SaveAs("C:\Training.XLS")

*выход из Excel.
MyObject.Quit

return

Теперь запускайте свое творение через меню “Program/Do” и наслаждайтесь чувством превосходства.

Как нетрудно догадаться, можно записать свои ручные действия над таблицей Excel в виде макроса VBA, а потом с небольшими изменениями использовать полученный исходник в программе на Visual FoxPro, добавляя для каждого вызова метода имя своего OLE-объекта.

Если же Вы предпочитаете работать в MS Access и вызывать из него, скажем, Word, то будет ещё проще. В своей базе данных создайте новый модуль, а внутри его запишите этот пример процедуры на языке Visual Basic:

Sub usingOLE()

Set MyObject = CreateObject("Word.Application")

MyObject.Visible = True

MyObject.Documents.Add

MyObject.Selection.TypeParagraph

MyObject.Selection.TypeText("Hello world!")

MyObject.ActiveDocument.SaveAs("C:\Мои документы\Hello world.doc)

MyObject.Quit

End Sub

Теперь в любом макросе своей БД Вы можете вызывать эту процедуру с помощью команды “ОткрытьМодуль”.

Аналогично, Вы можете в любой среде разработки, поддерживающей OLE, запрограммировать работу с любым OLE-сервером.

Конечно, везде есть свои “НО”. Во-первых, внутри макросов зачастую используются константы, специфичные для каждого конкретного приложения, значения которых явно не заданы и Вашей программе неизвестны. Чаще всего константы используются в методах форматирования документов. Это препятствие можно обойти. Например, в Excel достаточно будет программно присвоить константу какой-нибудь ячейке, и она сразу же отобразит значение. Для этого создайте пустой макрос и введите в него следующий код:

Sheets("Лист1").Select

ActiveCell.Value = xlMinimized ’константы состояния окна

Range("A7").Value = xlMaximized

Далее, через меню “Сервис/Макрос/Выполнить” запустите свой макрос и увидите результаты.

Во-вторых, не все методы объектов Office доступны извне. Я ещё не встречал, хоть какого-нибудь руководства, описывающего доступные методы в Office 97 (может плохо искал :-), поэтому для каждого приложения в отдельности приходится применять метод проб и ошибок.

Небольшие примеры находятся в печатных томах “Руководства по программированию на Visual Basic for Applications”, которое поставляется вместе с лицензионными копиями Office 97. Они достойны внимания программистов, начинающих штурмовать OLE уже после освоения объектного программирования в других языках. Кстати, в руководстве по Visual FoxPro они тоже есть, правда на английском языке, что для большинства программистов, к сожалению, является непреодолимой преградой (примите мои соболезнования).

Желаю успеха.

Victor Makovchik

P. S. Приведенные выше примеры работают только с Office 97. Для ранних версий Office используются другие имена объектов и другие методы.


At title page - НаверхReturn at title page - Возврат на основную страницу