Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.48 MB
Время: 0.034 c
1-1095413767
Ms.Dunkul
2004-09-17 13:36
2004.10.10
height


14-1095292657
Мистер Х
2004-09-16 03:57
2004.10.10
Будущее MS Windows


1-1096357704
Aser
2004-09-28 11:48
2004.10.10
Как совместить название элемента/переменной с другой переменной?


3-1094794847
stone
2004-09-10 09:40
2004.10.10
Даты в Access


1-1095718048
VAmpiro$
2004-09-21 02:07
2004.10.10
Как записать в файл рисунок?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский