Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.47 MB
Время: 0.01 c
1-30370
OxOTHuK
2003-03-28 15:54
2003.04.10
ShellExecute и передача параметров


1-30422
любитель
2003-03-31 05:24
2003.04.10
Можно ли сделать бесконечный цикл в Delphi


14-30572
iNew
2003-03-25 03:39
2003.04.10
Прикольный сайт http://y.20q.net:8095/ Прога угадывает загаданное


1-30325
jen_bond
2003-03-31 13:12
2003.04.10
Очистка канвы формы


1-30429
[BAD]Angel
2003-03-28 19:24
2003.04.10
Как определить полный размер папки?




   Наверх