Текущее время: Сб, сен 22 2018, 07:44

Часовой пояс: UTC + 4 часа


Правила форума


ВНИМАНИЕ!

Вопросы по SAP Query и Quick View - сюда



Начать новую тему Ответить на тему  [ Сообщений: 6 ] 
Автор Сообщение
 Заголовок сообщения: OLE не удаляется процесс Excel
СообщениеДобавлено: Чт, апр 05 2018, 18:38 
Ассистент
Ассистент

Зарегистрирован:
Пт, ноя 30 2007, 11:12
Сообщения: 47
Пол: Мужской
Коллеги, добрый вечер.

У меня имеется 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'.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: OLE не удаляется процесс Excel
СообщениеДобавлено: Чт, апр 05 2018, 20:02 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, авг 19 2004, 18:37
Сообщения: 1846
Откуда: Москва
Пол: Мужской
Насколько помню, это из-за QUIT. Т.е. приложение само-убивается, а ссылки на него где-то подвисают в SAP GUI. Поэтому ссылки максимально надо чистить до QUIT.

_________________
"For all entries" не в SAP-ах, "for all entries" в головах! :)


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: OLE не удаляется процесс Excel
СообщениеДобавлено: Пт, апр 06 2018, 10:54 
Ассистент
Ассистент

Зарегистрирован:
Пт, ноя 30 2007, 11:12
Сообщения: 47
Пол: Мужской
Сделал перед выходом 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.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: OLE не удаляется процесс Excel
СообщениеДобавлено: Пт, апр 13 2018, 11:18 
Специалист
Специалист

Зарегистрирован:
Вт, июн 10 2014, 10:41
Сообщения: 148
Посмотрите код метода cl_rsdd_xls_factory=>free( ). Там много всего подчищается.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: OLE не удаляется процесс Excel
СообщениеДобавлено: Пт, апр 13 2018, 12:45 
Менеджер
Менеджер
Аватара пользователя

Зарегистрирован:
Пт, янв 18 2008, 11:34
Сообщения: 704
Откуда: Tashkent -> Astana -> Moscow
Пол: Мужской
я в таких случаях использую возможности трассировки на стороне GUI.
SAPGUI Automation Trace
Единственное надо указать чтобы трассировка включала все, не только ошибки и предупреждения.
В файле трассировки можно увидеть всю картину от создания OLE объекта до его уничтожения. Там же можно и увидеть
какой объект создан но не уничтожен или нарушен порядок его уничтожения.

_________________
Пользователь не знает, чего он хочет, пока не увидит то, что он получил. (Э. Йодан)


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: OLE не удаляется процесс Excel
СообщениеДобавлено: Пт, май 04 2018, 17:35 
Специалист
Специалист

Зарегистрирован:
Пн, дек 29 2008, 08:19
Сообщения: 124
Пол: Мужской
в таком виде работает...

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.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 6 ] 

Часовой пояс: UTC + 4 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB