Убивание Excel из Clarion

Clarion, Clarion 7

Модератор: Дед Пахом

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Ответить
SAM

Убивание Excel из Clarion

Сообщение SAM »

Создаю Ole, который Excel (по Create). Открываю имеющийся файл XLS. Из него читаю инфу, которую в Кларионе обрабатываю. Тут все ОК. А вот когда выхожу из Excel, он, сволочь, продолжает висеть в списке процессов со всеми вытекающими последствиями. В Инете масса ответов на эту ситуацию, но ни один у меня не срабатывает. Не помогает ни deactivate, ни тройной destroy, ни Application.Quit. Вот гад! У меня XP SP2, CW55ee с ШВС, Excel 2003. Подскажите, плииз, правильную последовательность завершения работы, а то ведь обидно на такой ерунде застрять.
Аватара пользователя
Губин Игорь
✯ Ветеран ✯
Сообщения: 2367
Зарегистрирован: 16 Сентябрь 2005, 16:35
Откуда: Москва
Благодарил (а): 1 раз
Поблагодарили: 19 раз

Re: Убивание Excel из Clarion

Сообщение Губин Игорь »

Попробуй Formula One. Отличная штука, мне понравилась.
И EXEL не требует :D
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7498
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 18 раз
Поблагодарили: 51 раз

Сообщение Игорь Столяров »

Никогда не обращал на это внимание, сейчас проверил - Excel отрабатывает и выгружается абсолютно корректно без проблем.
XP SP2 + CW6.2EE ABC, Excel 2003

Команды OLE на выгрузку самые тривиальные, без наворотов:

! --- Выгрузка Excel ---

ExcelObject{'Save'}
ExcelObject{'Close'}
ExcelObject{Prop:Deactivate}
Destroy(ExcelObject)

! --- Все ---
За теми кто отстал - не возвращаться. (С) Кодекс
SAM

Сообщение 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
ru_alex
Ветеран
Сообщения: 333
Зарегистрирован: 21 Сентябрь 2005, 11:05
Откуда: Нижний Новгород
Контактная информация:

Сообщение 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 раза делать. Зачем объяснить не могу :)
SAM

Сообщение SAM »

Все ОК. Закавыка оказалась в том, что я мочил Excel ПОСЛЕ закрытия окна. Естественно, получал то, что получал. Феньк всем, кто откликнулся.
Ответить