Убивание Excel из Clarion
Модератор: Дед Пахом
Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Убивание Excel из Clarion
Создаю 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 не требует
И EXEL не требует
- Игорь Столяров
- Ветеран движения
- Сообщения: 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)
! --- Все ---
XP SP2 + CW6.2EE ABC, Excel 2003
Команды OLE на выгрузку самые тривиальные, без наворотов:
! --- Выгрузка Excel ---
ExcelObject{'Save'}
ExcelObject{'Close'}
ExcelObject{Prop:Deactivate}
Destroy(ExcelObject)
! --- Все ---
За теми кто отстал - не возвращаться. (С) Кодекс
А вот и фига. Процесс по-прежнему висит. Причем такая закавыка: если я создаю новый 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
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
-
- Ветеран
- Сообщения: 333
- Зарегистрирован: 21 Сентябрь 2005, 11:05
- Откуда: Нижний Новгород
- Контактная информация:
У меня XP sp2, Office2003. Следующий код нормально отрабатывает:
PS^ Excel закрывается на Cole{'QUIT'}, объект выгружается на destroy(Cole). Вырезал из проекта, может не все нужно, но по-моему не destroy, а prop:deactivate нужно 3 раза делать. Зачем объяснить не могу
Код: Выделить всё
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)