![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Позднее связываение Excel и OLE контейнер [D7, Win2k, WinXP]
П7 © (2004-09-24 14:14:00)Уважаемые Мастера! У меня возникла проблема в "запихивании" Ёкселя в OLE контейнер. Для работы с Ёкселем я использую позднее связывание (так надо, хотя скорость падает), но никакх не могу указать ему, что открываться нужно не в новом окне, как он делает при создании нового Worksheet'а или открытии документа, а в моём OLE контейнере. У TExcelApplication имеется такой метод, как ConnectTo:
ExcelApp.ConnectTo( (OLEContExcel.OleObjectInterface as ExcelWorkbook).Application );
но это - ранее связывание, а мне нужно позднее. Такого метода у создаваемого поздним связыванием ExcelApplication просто нет. Как быть?
П7 (2004-09-24 16:45:00) [1]
> KSergey © (24.09.04 16:18) [7]
Не, теряться не нужно. У меня не получается показать созданный поздним связыванием ExcelApplication в OLE-контейнере. Вот и всё. Если я обычнм образом его создаю, то вместо того, чтобы появиться в ОЛЕ-контейнере, он открывает отдельное окно Excel'я и работает с ним. Оно и понятно, ведь на OLE-контейнер ничего не указывает.
> > Excel.Run;
>
> Это че такое???
Это я малость не то написал.
OLEContExcel.Run;
Вот... (:
Экземпляр запускается так:
OLEContExcel.CreateObjectFromFile( PathDir+'\regpro\shablon.xls', False );
OLEContExcel.Run;
Или я что-то путаю?
В процессе извращений обнаружилась странная вещь. Если при созщдании, поздним связыванием, ExcelApplication'а поставить ему Visible в FALSE, то это Ёксель Аппликейшен начинает работать с уже открытым и показанным в OLE-контейнере экземпляром. Пока пользуюсь этим, но мне кажется, что это как-то не правильно...
Polevi (2004-09-24 16:28:00) [2]для листа вот так
procedure TForm1.FormCreate(Sender: TObject);
begin
OleContainer1.CreateObject('Excel.Sheet',false);
OleContainer1.AutoActivate := aaManual;
OleContainer1.DoVerb(ovShow);
end;
KSergey (2004-09-24 16:18:00) [3]
> Excel.Run;
Это че такое???
GetActiveOleObject подключается к уже запущенному экземпляру; если его нет - понятно ошибка; стандартный ход на это
try
FWordApp := GetActiveOleObject ('Word.Application');
except
FWordApp := CreateOLEObject ('Word.Application');
end;
А вообще-то, я что-то потерялся: что получить-то надо?
Erik1 (2004-09-24 16:00:00) [4]Неиспользовать Excel, может хватит возможностей OCX компонента из поставки Delphi?
П7 (2004-09-24 15:05:00) [5]
> clickmaker © (24.09.04 14:40) [3]
Открыл, посмотрел, ничего там такого интересного нету. Он передаёт полученный Application параметром в ConnectEvents. Этого метода так же нет. Ничего не понимаю... ):
> KSergey © (24.09.04 14:54) [4]
GetActiveOleObject возвращает ошибку, мол "не найден указанный источник объекта". Делаю так, может не правильно?
// бал-бал из предыдущего листинга
Excel.Run; // после этой строчки пишу
// тут возникает описанная ошибка
ExcelApp := GetActiveOleObject( 'Excel.Application' );
Блин!!! ): Чёж теперь делать-то? ):
KSergey (2004-09-24 14:54:00) [6]На сколько я понимаю, ExcelApp.ConnectTo есть эквивалент GetActiveOleObject, либо (в случае отсутствия запущенного экземпляра) - CreateOleObject
clickmaker (2004-09-24 14:40:00) [7]
> [2] П7 (24.09.04 14:33)
Открой delphi\ocx\servers\excel97.pas да посмотри реализацию этого connectto. Может, натолкнет на какие мысли
П7 (2004-09-24 14:33:00) [8]Дык не знаю, куда он делся. Может быть при создании TExcelApplication этот метод специально дописали, чтобы расширить его возможности. Не знаю, в общем... Так как проблему-то решить? Вот кусок кода...
ExcelApp := CreateOleObject('Excel.Application');
ExcelApp.DisplayAlerts := false;
OLEContExcel.CreateObjectFromFile( PathDir+'\regpro\shablon.xls', False );
OLEContExcel.Run;
Далее при раннем связывании идёт:
ExcelApp.ConnectTo( (OLEContExcel.OleObjectInterface as ExcelWorkbook).Application );
И всё работает, но при позднем связывании на этапе выполнения (оно и понятно) происходит ошибка:
Class EOleError with messages 'Method 'ConnectTo' not supported by... бла-бла'
ВотЪ! ):
clickmaker (2004-09-24 14:16:00) [9]
> Такого метода у создаваемого поздним связыванием ExcelApplication
> просто нет
Куда делся? Количество методов - это же программный код, он не зависит от способа подключения клиента к серверу