Страница 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 не требует :D

Добавлено: 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 ПОСЛЕ закрытия окна. Естественно, получал то, что получал. Феньк всем, кто откликнулся.