Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как правидлно закрыть Excel?


Страницы:   1 2

ВиТ ©   (2004-09-25 20:12:00) 

Я работаю с Excel с помощью переменной типа вариант:
var xl:Variant;
xl:=CreateOLEObject('Excel.Application');
и т.д.
Когда программа завершает работу необходимо закрыть Excel командой
xl.quit. Но если он не был запущен, то возникает ошибка!
Ка проверить, связана ли xl c Екселем?  т.е. запушен ли он.
Пробовал
if xl.Active then xl.quit
не помогает. Т.к. сама проверка xl.Active вызывает ошибку.
try.. except тоже не помогло:(


Sergey_Masloff   (2004-09-26 00:01:00) [21]

YurikGL ©   (25.09.04 23:57) [6]
Извини, тоже в хелп и в тот же раздел. Потому что как мне кажется налицо полное непонимание вопроса работы с серверами автоматизации через вариантные переменные. Или я ничего не понимаю...


YurikGL   (2004-09-26 00:00:00) [22]


> Sergey_Masloff   (25.09.04 23:55) [5]

Кстати, если app не связана с екслелем, то  исключение вызывает не app.quit а app<>Unassigned так что сравнение не корректно.

Если только наступили на одни грабли, потом на другие :-)


Sergey_Masloff   (2004-09-25 23:59:00) [23]

Господин ВиТ © если вы используете функцию CreateOLEObject для присвоения указателя на интерфейс варианту то дайте себе труд ознакомиться с разделом справки по этой функции. Там 3 абзаца всего.


YurikGL   (2004-09-25 23:57:00) [24]


> Sergey_Masloff   (25.09.04 23:55) [5]

:-) Код конечно извращенный, но с ходу ничего другого не придумал...:-( Зато работает...

А если по уму, то проще сделать флажок типа запускался или нет вообще ексель во время текущего сеанса и перед выходом его проверять


Sergey_Masloff   (2004-09-25 23:55:00) [25]


try
if app<>Unassigned then app.quit;
except
app.quit;
end;

Это называется пробуем наступить на грабли. Если получили по лбу то наступаем снова.


Sergey_Masloff   (2004-09-25 23:53:00) [26]

Зачем использовать quit?


YurikGL   (2004-09-25 23:49:00) [27]


> ВиТ ©   (25.09.04 23:43) [2]

Дык это ж когда из делфи запускаешь EVariantInvalidOpError вываливается, а когда прогу не из делфи запускаешь, все будет OK


ВиТ   (2004-09-25 23:43:00) [28]

У меня всё равно не работает:(

try
if app<>Unassigned then app.quit;
except
app.quit;
end;

и в результате:
---------------------------
Debugger Exception Notification
---------------------------
Проект mm.exe вызвал исключение класса EVariantInvalidOpError с сообщением 'Invalid variant operation'. Процесс остановлен. Используйте Шаг или Запуск для продолжения.
---------------------------
OK   Help  
---------------------------


YurikGL   (2004-09-25 23:21:00) [29]


> try.. except тоже не помогло:(

Код в студию!!!

> Ка проверить, связана ли xl c Екселем?  т.е. запушен ли
> он.


Запущен ексель или нет проверяется поиском окна

У меня сработал следующий код
app:variant

try
if app<>Unassigned then app.quit;
except
 app.quit;
end;

Кстати, если app не связана с екслелем, то исключения не возникает, а если связана, то возникает. Почему - не знаю.


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо