Главная страница
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.015 c
1-30414
Скаил
2003-03-28 13:26
2003.04.10
Какое событие возникает при копировании файла на дискету?


3-30236
Deus
2003-03-16 05:20
2003.04.10
Какой тип БД лучше пользовать?


6-30482
TankMan
2003-02-12 00:52
2003.04.10
Какой-то глюк с ClientSocket


1-30388
a
2003-03-30 09:24
2003.04.10
какая технология позволяет проделать вот такое -


9-30206
HellTrooper
2002-11-10 13:30
2003.04.10
2D карта