![]() |
|
... Если Вы не только программист, но и творческая личность, вероятно, Вы не раз обращали внимание, что Вашим программам не хватает функций по обработке текста, как в 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 они тоже есть, правда, на английском языке, что для большинства программистов, к сожалению, является непреодолимой преградой (примите мои соболезнования). Желаю успеха. P. S. Приведенные выше примеры работают только с Office 97. Для ранних версий Office используются другие имена объектов и другие методы. Виктор Маковчик © Компьютерная газета
|
|