Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.10.10;
Скачать: CL | DM;

Вниз

Позднее связываение Excel и OLE контейнер   Найти похожие ветки 

 
П7   (2004-09-24 14:14) [0]

Уважаемые Мастера! У меня возникла проблема в "запихивании" Ёкселя в OLE контейнер. Для работы с Ёкселем я использую позднее связывание (так надо, хотя скорость падает), но никакх не могу указать ему, что открываться нужно не в новом окне, как он делает при создании нового Worksheet"а или открытии документа, а в моём OLE контейнере. У TExcelApplication имеется такой метод, как ConnectTo:

ExcelApp.ConnectTo( (OLEContExcel.OleObjectInterface as ExcelWorkbook).Application );

но это - ранее связывание, а мне нужно позднее. Такого метода у создаваемого поздним связыванием ExcelApplication просто нет. Как быть?


 
clickmaker ©   (2004-09-24 14:16) [1]


> Такого метода у создаваемого поздним связыванием ExcelApplication
> просто нет

Куда делся? Количество методов - это же программный код, он не зависит от способа подключения клиента к серверу


 
П7   (2004-09-24 14:33) [2]

Дык не знаю, куда он делся. Может быть при создании 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:40) [3]


> [2] П7   (24.09.04 14:33)

Открой delphi\ocx\servers\excel97.pas да посмотри реализацию этого connectto. Может, натолкнет на какие мысли


 
KSergey ©   (2004-09-24 14:54) [4]

На сколько я понимаю, ExcelApp.ConnectTo есть эквивалент GetActiveOleObject, либо (в случае отсутствия запущенного экземпляра) - CreateOleObject


 
П7   (2004-09-24 15:05) [5]


> clickmaker ©   (24.09.04 14:40) [3]

Открыл, посмотрел, ничего там такого интересного нету. Он передаёт полученный Application параметром в ConnectEvents. Этого метода так же нет. Ничего не понимаю... ):


> KSergey ©   (24.09.04 14:54) [4]

GetActiveOleObject возвращает ошибку, мол "не найден указанный источник объекта". Делаю так, может не правильно?

 // бал-бал из предыдущего листинга
 Excel.Run; // после этой строчки пишу
 // тут возникает описанная ошибка
 ExcelApp := GetActiveOleObject( "Excel.Application" );


Блин!!! ): Чёж теперь делать-то? ):


 
Erik1 ©   (2004-09-24 16:00) [6]

Неиспользовать Excel, может хватит возможностей OCX компонента из поставки Delphi?


 
KSergey ©   (2004-09-24 16:18) [7]


> Excel.Run;

Это че такое???

GetActiveOleObject подключается к уже запущенному экземпляру; если его нет - понятно ошибка; стандартный ход на это

 try
   FWordApp := GetActiveOleObject ("Word.Application");
 except
   FWordApp := CreateOLEObject ("Word.Application");
 end;


А вообще-то, я что-то потерялся: что получить-то надо?


 
Polevi ©   (2004-09-24 16:28) [8]

для листа вот так

procedure TForm1.FormCreate(Sender: TObject);
begin
 OleContainer1.CreateObject("Excel.Sheet",false);
 OleContainer1.AutoActivate := aaManual;
 OleContainer1.DoVerb(ovShow);
end;


 
П7   (2004-09-24 16:45) [9]


> 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-контейнере экземпляром. Пока пользуюсь этим, но мне кажется, что это как-то не правильно...



Страницы: 1 вся ветка

Текущий архив: 2004.10.10;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.03 c
1-1096088618
Kair()
2004-09-25 09:03
2004.10.10


3-1094789320
Mefodiy
2004-09-10 08:08
2004.10.10
Использование UCASE в SQL запросе


14-1095934931
Layner
2004-09-23 14:22
2004.10.10
OpenSourse


1-1095871568
misha123
2004-09-22 20:46
2004.10.10
опять Excel... поиск по листам?


9-1086805912
VitGun
2004-06-09 22:31
2004.10.10
Подсветка объектов. GLScene.