Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.007 c
14-30520
DuBan
2003-03-22 07:32
2003.04.10
Народ , не подскажете как сделать чтобы в меню Открыть с по...


1-30398
Intell
2003-03-30 14:18
2003.04.10
Как изменить цвет выделения строки в ListBox?


14-30581
Ильдар
2003-03-25 10:07
2003.04.10
vcldb60.bpl


4-30663
brom
2003-02-08 09:26
2003.04.10
Вызвать диалог поиск файлов?


14-30552
ZeroDivide
2003-03-24 11:19
2003.04.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
Английский Французский Немецкий Итальянский Португальский Русский Испанский