Форум: "Основная";
Текущий архив: 2004.10.10;
Скачать: [xml.tar.bz2];
ВнизПозднее связываение 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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.043 c