Страница 1 из 1
Убивание Excel из Clarion
Добавлено: 26 Январь 2006, 13:31
SAM
Создаю Ole, который Excel (по Create). Открываю имеющийся файл XLS. Из него читаю инфу, которую в Кларионе обрабатываю. Тут все ОК. А вот когда выхожу из Excel, он, сволочь, продолжает висеть в списке процессов со всеми вытекающими последствиями. В Инете масса ответов на эту ситуацию, но ни один у меня не срабатывает. Не помогает ни deactivate, ни тройной destroy, ни Application.Quit. Вот гад! У меня XP SP2, CW55ee с ШВС, Excel 2003. Подскажите, плииз, правильную последовательность завершения работы, а то ведь обидно на такой ерунде застрять.
Re: Убивание Excel из Clarion
Добавлено: 26 Январь 2006, 13:43
Губин Игорь
Попробуй Formula One. Отличная штука, мне понравилась.
И EXEL не требует

Добавлено: 26 Январь 2006, 14:30
Игорь Столяров
Никогда не обращал на это внимание, сейчас проверил - Excel отрабатывает и выгружается абсолютно корректно без проблем.
XP SP2 + CW6.2EE ABC, Excel 2003
Команды OLE на выгрузку самые тривиальные, без наворотов:
! --- Выгрузка Excel ---
ExcelObject{'Save'}
ExcelObject{'Close'}
ExcelObject{Prop:Deactivate}
Destroy(ExcelObject)
! --- Все ---
Добавлено: 27 Январь 2006, 9:02
SAM
А вот и фига. Процесс по-прежнему висит. Причем такая закавыка: если я создаю новый XLS, в который что-то пишу, то выхожу без проблем. Трудности начинаются, когда я открываю имеющийся XLS для чтения, а потом закрываю.
XLS = CREATE(0, CREATE:OLE)
XLS{PROP:Create} = 'Excel.Application'
XLS{'Workbooks.Open("' & XLSname & '")'}
XLS{PROP:DoVerb} = 1
XLS{prop:Compatibility} = 1
XLS{PROP:ReportException} = True
XLS{'Application.Visible'} = False
Далее читаю. А потом, как советовал Столяров
XLS{'Save'}
XLS{'Close'}
XLS{Prop:Deactivate}
loop 3 times !! Так советуют спецы для CW55
destroy(XLS)
end
У меня самого завершение такое:
XLS{'Workbooks.Close(0)'}
XLS{PROP:ReportException} = False
XLS{'Application.Quit'}
XLS{PROP:Deactivate}
loop 3 times
destroy(XLS)
end
Добавлено: 27 Январь 2006, 10:20
ru_alex
У меня XP sp2, Office2003. Следующий код нормально отрабатывает:
Код: Выделить всё
Cole = create(0, create:ole)
Cole{prop:create} = 'Excel.Application'
Cole{'Application.Activate'}
Cole{'Application.Visible'} = true
Cole{'Application.Workbooks.Open("'&clip(LOC:Exfile)&'")'}
....
Cole{'ActiveWorkBook.Saved'} = 1
Cole{'ActiveWindow.Close(0)'}
Cole{'QUIT'}
Cole{prop:deactivate}
Cole{prop:deactivate}
Cole{prop:deactivate}
destroy(Cole)
PS^ Excel закрывается на Cole{'QUIT'}, объект выгружается на destroy(Cole). Вырезал из проекта, может не все нужно, но по-моему не destroy, а prop:deactivate нужно 3 раза делать. Зачем объяснить не могу

Добавлено: 27 Январь 2006, 16:40
SAM
Все ОК. Закавыка оказалась в том, что я мочил Excel ПОСЛЕ закрытия окна. Естественно, получал то, что получал. Феньк всем, кто откликнулся.