новичку про OLE объекты ))

Общие вопросы программирования, алгоритмы и т.п.

Модератор: Модераторы

новичку про OLE объекты ))

Сообщение kamber » 12.03.2012 21:58:37

Решил написать пробничек.
По ссылке
http://hjvfyjdfynjy.ya.ru/replies.xml?item_no=181
нашел кусочек кода вроде этого:

Код: Выделить всё
procedure TForm1.Button1Click(Sender: TObject);
var
Excel : variant;
begin
   
     Excel := CreateOleObject('Excel.Application');                       \\создали
     Excel.WorkBooks.Open(WideString(UTF8Decode('c:\1.xls'))); \\открыли
     Excel.Visible:=true;                                                       \\показали
     Excel.Cells(2,5):='!!!!!!!!';                                                   \\написали
     Excel.quit;                                                                         \\вышли
   
end;       



При поиске по форуму (lazarus+excel) нашел

Код: Выделить всё
S := Excel.Cells[iRow, iCol].Value;  // Читаем значение
        Excel.Cells[iRow, iCol].Value := 'Пишем в ячейку значение';


Обратил внимание на синтаксис строчки чтения-записи.
Не совсем понял почему такая разница.
Где посмотреть свойства и методы созданного объекта? Вид скобок, указания типов и пр.
Заранее благодарю )
kamber
незнакомец
 
Сообщения: 7
Зарегистрирован: 11.03.2012 12:09:53

Re: новичку про OLE объекты ))

Сообщение Vadim » 13.03.2012 02:46:02

kamber писал(а):Где посмотреть свойства и методы созданного объекта? Вид скобок, указания типов и пр.

Единственное место, где об этом можно узнать - справка по Excel, раздел "Программирование" или MSDN.
Правильно - в квадратных скобках.
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: новичку про OLE объекты ))

Сообщение kamber » 13.03.2012 04:18:07

Vadim Спасибо.

All
Для справки - оба примера рабочие. Почему-то ))
kamber
незнакомец
 
Сообщения: 7
Зарегистрирован: 11.03.2012 12:09:53

Re: новичку про OLE объекты ))

Сообщение SSerge » 13.03.2012 05:11:40

Vadim писал(а):Где посмотреть свойства и методы созданного объекта?


Visual Basic, или VBA (В том же самом excele) - единственное место, в котором можно увидеть всё. :) Причем, реальную картину, а не так, как ее описал кто-то. Есть там такая штука, типа инспектора COM объектов. К сожалению, какие либо сторонние инструментарии, в том числе те, что прилагались к дельфям, сильно не дотягивают до уровня вышеперечисленных инструментов.

Кстати, если после первого восхищения, решил эту методику широко применять... При большом количестве обращений, внешнее управление объектами офисного хозяйства работает до омерзительности медленно и может стать основным тормозом приложения.
SSerge
энтузиаст
 
Сообщения: 971
Зарегистрирован: 12.01.2012 05:34:14
Откуда: Барнаул

Re: новичку про OLE объекты ))

Сообщение Vadim » 13.03.2012 06:08:43

kamber писал(а):Для справки - оба примера рабочие. Почему-то

Я по COM-объектам не сильный специалист. :)
У них есть только методы. Видимых данных (как можно сделать в объектах Delphi или С++) у них нет. Поэтому изначально правильно - это обращение к Cells как к методу, т.е. с круглыми скобками. Однако в справке у M$ все примеры даются именно с квадратными скобками, т.к. Cells - это массив ячеек.
Вот такие вот они, Микрософты, все внезапные... :)
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: новичку про OLE объекты ))

Сообщение kamber » 13.03.2012 07:53:21

SSerge писал(а): Есть там такая штука, типа инспектора COM объектов. К сожалению, какие либо сторонние инструментарии, в том числе те, что прилагались к дельфям, сильно не дотягивают до уровня вышеперечисленных инструментов.Кстати, если после первого восхищения, решил эту методику широко применять...


Vadim О каких инструментах речь? Замена COM-сервера? Методы доступа?

All Если кардинально упростить, то существует COM-сервер, который связывает приложение с нужной библиотекой. Т.е. особой разницы нет использовать COM или подключать библиотеку вручную?
Если ошибаюсь - поправьте )
kamber
незнакомец
 
Сообщения: 7
Зарегистрирован: 11.03.2012 12:09:53

Re: новичку про OLE объекты ))

Сообщение SSerge » 13.03.2012 08:29:42

kamber
Метод, которым делается обращение, называется OLE Automation. Собственно, его есть два варианта применения - или напрямую, как в вашем примере, или с использованием специализированных интерфейсных библиотек (в дельфях это называют "ранним связыванием"). Специализированные библиотеки, сделанные для офиса XP, 2003-го, например, в упор не видят и наоборот; в чем их основной недостаток. А так - считается что вообще удобнее, и работаете вы часто не с типом Variant, а с нативным представлением данных для вашего языка программирования. При прямом методе применения, до самого вызова и обращения к реальной программе, у вас нет никаких шансов проверить, не ошиблись ли вы где-нибудь в синтаксисе, в именах и прочем.

Упрощая:
COM-сервером является само приложение (EXCEL). Никаких заранее предопределённых связей не производится. Через некоторый универсальный протокол обмена происходит передача данных от вашей программы внутренним объектам EXCEL, и если они соизволят интерпретировать ваши данные, то могут что-нибудь отослать в ответ или выполнить действие.
SSerge
энтузиаст
 
Сообщения: 971
Зарегистрирован: 12.01.2012 05:34:14
Откуда: Барнаул

Re: новичку про OLE объекты ))

Сообщение kamber » 13.03.2012 10:47:45

SSerge
Благдарю. Все понятно.
kamber
незнакомец
 
Сообщения: 7
Зарегистрирован: 11.03.2012 12:09:53

Re: новичку про OLE объекты ))

Сообщение Sergei I. Gorelkin » 13.03.2012 11:56:24

У COM-объектов нет данных, но есть свойства, которые могут иметь индексы и которые необходимо читать и записывать с помощью специальных методов (с флагом DISPATCH_PROPERTYGET или DISPATCH_PROPERTYPUT). Поэтому в FPC выражение a:=disp.name(x,y) преобразуется в вызов метода, а выражение a:=disp.name[x,y] - в чтение свойства. Но слева от знака равенства и то и другое преобразуется в запись свойства, в основном потому что Дельфи ведет себя так же (и ни во что другое такое выражение не преобразуется).
Аватара пользователя
Sergei I. Gorelkin
энтузиаст
 
Сообщения: 1405
Зарегистрирован: 24.07.2005 14:40:41
Откуда: Зеленоград

Re: новичку про OLE объекты ))

Сообщение kamber » 14.03.2012 04:42:16

Sergei I. Gorelkin Спасибо.... Гм... Понял, что мало чего не понял ))) Ушел сюда
http://www.firststeps.ru/mfc/activex/activex1.html
Чую ... вернусь не скоро ))
kamber
незнакомец
 
Сообщения: 7
Зарегистрирован: 11.03.2012 12:09:53


Вернуться в Общее

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 12

Рейтинг@Mail.ru