Текущее время: Ср, июл 18 2018, 16:41

Часовой пояс: 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
Сообщения: 1819
Откуда: Москва
Пол: Мужской
Насколько помню, это из-за 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
Сообщения: 146
Посмотрите код метода cl_rsdd_xls_factory=>free( ). Там много всего подчищается.


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

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

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


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

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

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 часа


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

Сейчас этот форум просматривают: BingBot, Google [Bot], MaрьЯ


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

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