SAPфорум.RU https://sapboard.ru/forum/ |
|
OLE не удаляется процесс Excel https://sapboard.ru/forum/viewtopic.php?f=13&t=96261 |
Страница 1 из 1 |
Автор: | Galych [ Чт, апр 05 2018, 17:38 ] |
Заголовок сообщения: | OLE не удаляется процесс Excel |
Коллеги, добрый вечер. У меня имеется excel файл с двумя вкладками. Мне нужно сохранить данные этих вкладок в текстовые файлы. Ниже указан код, который выполняет необходимые условия. Но после выполнения процесс Excel не "убивается", а остается висеть в диспетчере задач. Не могу понять в чем причина. Помогите, пожалуйста!!! Code: DATA:
ls_application TYPE ole2_object, ls_workbooks TYPE ole2_object, ls_active_workbook TYPE ole2_object, ls_active_workbook2 TYPE ole2_object, ls_sheet TYPE ole2_object, lv_filename_1 TYPE string, lv_filename_2 TYPE string. START-OF-SELECTION. lv_filename_1 = |C:\\TEMP\\TAB_1{ sy-datum }{ sy-uzeit }.TXT|. lv_filename_2 = |C:\\TEMP\\TAB_2{ sy-datum }{ sy-uzeit }.TXT|. CREATE OBJECT ls_application 'Excel.Application'. SET PROPERTY OF ls_application 'DisplayAlerts' = 0. SET PROPERTY OF ls_application 'ScreenUpdating' = 0. SET PROPERTY OF ls_application 'Visible' = 0. CALL METHOD OF ls_application 'Workbooks' = ls_workbooks. CALL METHOD OF ls_workbooks 'Open' EXPORTING #1 = 'C:\TEMP\1800000045.XLSX'. CALL FUNCTION 'FLUSH'. *** сохранение 1 вкладки CALL METHOD OF ls_application 'ActiveWorkbook' = ls_active_workbook. CALL METHOD OF ls_active_workbook 'Worksheets' = ls_sheet EXPORTING #1 = 1. CALL METHOD OF ls_sheet 'Copy'. CALL METHOD OF ls_application 'ActiveWorkbook' = ls_active_workbook2. CALL METHOD OF ls_active_workbook2 'SaveAs' EXPORTING #1 = lv_filename_1 #2 = 42. " xlUnicodeText CALL METHOD OF ls_active_workbook2 'Close' EXPORTING #1 = 0. CALL FUNCTION 'FLUSH'. FREE OBJECT ls_active_workbook. FREE OBJECT ls_active_workbook2. FREE OBJECT ls_sheet. *** сохранение 2 вкладки CALL METHOD OF ls_application 'ActiveWorkbook' = ls_active_workbook. CALL METHOD OF ls_active_workbook 'Worksheets' = ls_sheet EXPORTING #1 = 2. CALL METHOD OF ls_sheet 'Copy'. CALL METHOD OF ls_application 'ActiveWorkbook' = ls_active_workbook2. CALL METHOD OF ls_active_workbook2 'SaveAs' EXPORTING #1 = lv_filename_2 #2 = 42. " xlUnicodeText CALL METHOD OF ls_active_workbook2 'Close' EXPORTING #1 = 0. " закрываем excel * CALL METHOD OF ls_active_workbook 'Close' EXPORTING #1 = 0. CALL METHOD OF ls_application 'Quit'. CALL FUNCTION 'FLUSH'. " освобождаем память FREE OBJECT ls_active_workbook2. FREE OBJECT ls_sheet. FREE OBJECT ls_active_workbook. FREE OBJECT ls_workbooks. FREE OBJECT ls_application. CALL FUNCTION 'FLUSH'. |
Автор: | Parazit [ Чт, апр 05 2018, 19:02 ] |
Заголовок сообщения: | Re: OLE не удаляется процесс Excel |
Насколько помню, это из-за QUIT. Т.е. приложение само-убивается, а ссылки на него где-то подвисают в SAP GUI. Поэтому ссылки максимально надо чистить до QUIT. |
Автор: | Galych [ Пт, апр 06 2018, 09:54 ] |
Заголовок сообщения: | Re: OLE не удаляется процесс Excel |
Сделал перед выходом Quit очистку ссылок. Не помогло. Code: FREE OBJECT ls_active_workbook2. FREE OBJECT ls_sheet. FREE OBJECT ls_active_workbook. FREE OBJECT ls_workbooks. CALL FUNCTION 'FLUSH'. " закрываем excel CALL METHOD OF ls_application 'Quit'. CALL FUNCTION 'FLUSH'. " освобождаем память FREE OBJECT ls_application. CALL FUNCTION 'FLUSH'. Эта проблема возникает с Excel 2013. С версией excel 2010 работает без проблем, т.е. после работы процесс Excel "убивается". Причем если закомментировать сохранение, то процесс excel после работы удаляется. Code: CALL METHOD OF ls_active_workbook2 'SaveAs' EXPORTING #1 = lv_filename_1 #2 = 42. " xlUnicodeText CALL FUNCTION 'FLUSH'. Думаю обновить у себя SAP GUI. Сейчас у меня стоит 7.40 с патч уровнем 15. |
Автор: | UKY [ Пт, апр 13 2018, 10:18 ] |
Заголовок сообщения: | Re: OLE не удаляется процесс Excel |
Посмотрите код метода cl_rsdd_xls_factory=>free( ). Там много всего подчищается. |
Автор: | ghost [ Пт, апр 13 2018, 11:45 ] |
Заголовок сообщения: | Re: OLE не удаляется процесс Excel |
я в таких случаях использую возможности трассировки на стороне GUI. SAPGUI Automation Trace Единственное надо указать чтобы трассировка включала все, не только ошибки и предупреждения. В файле трассировки можно увидеть всю картину от создания OLE объекта до его уничтожения. Там же можно и увидеть какой объект создан но не уничтожен или нарушен порядок его уничтожения. |
Автор: | Malych [ Пт, май 04 2018, 16:35 ] |
Заголовок сообщения: | Re: OLE не удаляется процесс Excel |
в таком виде работает... SET PROPERTY OF excel 'DisplayAlerts' = 0. CALL METHOD OF excel 'QUIT'. CALL FUNCTION 'FLUSH' EXCEPTIONS CNTL_SYSTEM_ERROR = 1 CNTL_ERROR = 2 OTHERS = 3. IF SY-SUBRC = 0. FREE OBJECT book NO FLUSH. FREE OBJECT workbooks NO FLUSH. FREE OBJECT excel NO FLUSH. ENDIF. |
Страница 1 из 1 | Часовой пояс: UTC + 3 часа |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |