"Computer newspaper" - "Компьютерная газета" №33, 1999 год
Register now - Попробуй заработать
Get your 39$ - Получи чек! | FREE web site and $20 cash over & over!
Return at title page - Возврат на основную страницу |
Здесь и работает технология 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 они тоже есть, правда на английском языке, что для большинства программистов, к сожалению, является непреодолимой преградой (примите мои соболезнования).
Желаю успеха.
P. S. Приведенные выше примеры работают только с Office 97. Для ранних версий Office используются другие имена объектов и другие методы.
Return at title page - Возврат на основную страницу |