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