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

Вниз

Как закрыть Excel   Найти похожие ветки 

 
Солер ©   (2003-03-29 12:49) [0]

Здравствуйте, Мастера!
Помогите начинающему с Excel.
Программа открывает книгу Excel - всё работает:


procedure TForm1.Button1Click(Sender: TObject);
var
XLApp:Variant;

begin
XLApp:= CreateOleObject("Excel.Application");
XLApp.Workbooks.Open("\1.xls");
XLApp.Visible:=true;

Но как теперь корректно закрыть Excel
....
XLApp.Workbooks.Close("\1.xls");
XlApp.Quite;
Не получается


 
calm ©   (2003-03-29 13:20) [1]

попробуй
XlApp:=nil;


 
Palladin ©   (2003-03-29 13:22) [2]

не Quite а Quit


 
Calm ©   (2003-03-29 13:30) [3]


> не Quite а Quit

Кстати, да.

Но все равно нужно указывать COM-серверу, что он больше не используется программой.

Хотя, при выходе из обработчика Button1Click это вроде бы должно само выполниться.


 
Palladin ©   (2003-03-29 14:08) [4]


> Calm © (29.03.03 13:30)

это не должно само выполнятся при выходе из обработчика...


 
calm ©   (2003-03-29 15:15) [5]

Х-м... Не уверен...

XLApp:Variant есть не что иное, как указатель на интерфейс IDispatch. А как только указатель на итерфейс перестает жить (в том числе, когда пропадает область видимости, в которой он объявлен), то у интерфейса автоматом вызывается метод Release, что эквивалентно присваиванию значения nil.

IMHO, так.


 
Солер ©   (2003-03-29 16:15) [6]

nil не помогает
quite пока тоже


 
Palladin ©   (2003-03-29 16:29) [7]


> Солер © (29.03.03 16:15)

повторяю
xlApp. Quit;
почему у всех работает а у тебя нет?
вывод: ошибка совсем не там


 
Palladin ©   (2003-03-29 17:02) [8]


> calm © (29.03.03 15:15)

объекты вообще ничего не знают об области своей видимости...

представь себе ситуацию

procedure TForm1.Button1Click(Sender: TObject);
var
XLApp:Variant;

begin
XLApp:= CreateOleObject("Excel.Application");
XLApp.Workbooks.Open("\1.xls");
XLApp.Visible:=true;
блабла
XLApp.Workbooks.Close("\1.xls");
GlobalXLApp:=XLApp;
end;

По твоим словам GlobalXLApp будет ссылатся на несуществующий объект.
Не видишь ли ты ошибки в своих словах?


 
Calm ©   (2003-03-31 09:39) [9]

По словам статьи из HELP"а ссылки на интерфейс ПОДСЧИТЫВАЮТСЯ АВТОМАТИЧЕСКИ.

Впрочем, я не уверен, что присваивание вида указателя на интерфейс корректно.

Объекты, разумеется, не ведают о своей области видимости. Зато об этом прекрасно осведомлен компилятор Delphi.


 
Md   (2003-03-31 09:47) [10]

Может так:
XLApp:=UnAssigned;


 
Calm ©   (2003-03-31 09:50) [11]


> По словам статьи из HELP"а ссылки на интерфейс ПОДСЧИТЫВАЮТСЯ
> АВТОМАТИЧЕСКИ

Маленькое уточнение: должны подсчитываться. Это возлагается на реализацию COM-объекта (сейчас речь идет о COM). Уверен, что Excel следует спецификации COM.


 
Palladin ©   (2003-03-31 10:18) [12]

ссылки подсчитываются при Release
у Excel release вызывается в Quit

автоматом при выходе из любой процедры, у локального Com объекта release не вызывается...


 
calm ©   (2003-03-31 10:26) [13]

А что это такое " локальный" COM-объект?
Excel это обычный внепроцессный сервер.



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

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

Наверх




Память: 0.49 MB
Время: 0.023 c
3-30229
Lesha
2003-03-19 22:06
2003.04.10
QReport! как через QPreview мне сделать чтоб по PrinterSetup пере


3-30289
Наташа
2003-03-22 13:56
2003.04.10
выбор транзакции.


1-30356
Some1
2003-03-29 07:36
2003.04.10
OpenDialog и открытие директорий


1-30354
Psi-factor
2003-03-31 18:42
2003.04.10
Скроллинг в MEMO и RichEdit


14-30529
Barada
2003-03-24 11:52
2003.04.10
ПРОГРАММАТОР для Panasonic KXTA616