Текущее время: Вс, июл 13 2025, 14:56

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


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


ВНИМАНИЕ!

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



Начать новую тему Ответить на тему  [ Сообщений: 14 ] 
Автор Сообщение
 Заголовок сообщения: EXCEL и процессы Windows
СообщениеДобавлено: Вс, дек 17 2006, 13:13 
Старший специалист
Старший специалист

Зарегистрирован:
Вт, ноя 15 2005, 11:00
Сообщения: 288
Код:
Code:
 
DEFINE EXCEL_SET_VALUE.
  CALL METHOD OF worksheet 'Cells' = cell NO FLUSH
   EXPORTING
   #1 = &1 "строка
   #1 = &2. "столбец
  IF &3 is not initial.
    SET PROPERTY OF cell 'Value' = &3 no flush.
  ENDIF.
END-OF-DEFINITION.

DATA: excel              TYPE ole2_object,
      books              TYPE ole2_object,
      workbook           TYPE ole2_object,
      sheets             TYPE ole2_object,
      worksheet          TYPE ole2_object,
      cell               TYPE ole2_object,
      cell_1             TYPE ole2_object,
      range              TYPE ole2_object,
      borders            TYPE ole2_object,
      font               TYPE ole2_object.

  CREATE OBJECT excel 'Excel.Application'.

  CALL METHOD OF excel 'Workbooks' = books.

  CALL METHOD OF books 'Open'
    EXPORTING
    #1 = book_report_temp.

  CALL METHOD OF excel 'ActiveWorkbook' = workbook.

  CALL METHOD OF workbook 'SaveAS'
    EXPORTING
    #1 = book_report.

  CALL METHOD OF workbook 'Sheets' = sheets.

  CALL METHOD OF sheets 'Item' = worksheet EXPORTING #1 = 1.
  CALL METHOD OF worksheet 'SELECT'.


  SET PROPERTY OF cell 'HorizontalAlignment' = 3."центр
* получим ячейку 2 (для сливания)
  CALL METHOD OF worksheet 'Cells' = cell_1 NO FLUSH
    EXPORTING
      #1 = 1 "строка
      #1 = 22. "столбец
  perform Merge using cell cell_1.

  EXCEL_SET_VALUE 2 1 date_str.
  SET PROPERTY OF cell 'HorizontalAlignment' = 3."центр
* получим ячейку 2 (для сливания)
  CALL METHOD OF worksheet 'Cells' = cell_1 NO FLUSH
    EXPORTING
      #1 = 2 "строка
      #1 = 22. "столбец
  perform Merge using cell cell_1.

* выводим данные
  i = 6.
  LOOP AT it_tmp into wa_tmp.

    perform WriteExcelLine using wa_tmp i.
    i = i + 1.
  ENDLOOP.

  SET PROPERTY OF excel 'Visible' = 1.


  free object font.

  free object borders.

  free object range.

  free object cell_1.

  free object cell.

  free object worksheet.

  free object sheets.

  free object workbook.

  free object books.

  FREE OBJECT excel.
*******************
FORM WriteExcelLine using p_wa_tmp type s_ruk
                          p_i type i.

  EXCEL_SET_VALUE p_i 1 p_wa_tmp-stext.
  perform Bord using cell 'X' 'X' 'X' 'X'.
endform.
******************
FORM Merge USING   C_1 C_2.
  CALL METHOD OF worksheet 'Range' = range NO FLUSH
      EXPORTING
      #1 = C_1
      #1 = C_2.
  CALL METHOD OF range 'Merge' NO FLUSH.

ENDFORM.                               " MERGE
******************
FORM Bord USING CELL P_1 P_2 P_3 P_4.
  IF NOT P_1 IS INITIAL.
    CALL METHOD OF CELL 'BORDERS' = BORDERS
      NO FLUSH EXPORTING #1 = 1.
    SET PROPERTY OF BORDERS 'WEIGHT' = 2 NO FLUSH.
  ENDIF.
  IF NOT P_2 IS INITIAL.
    CALL METHOD OF CELL 'BORDERS' = BORDERS
      NO FLUSH EXPORTING #1 = 2.
    SET PROPERTY OF BORDERS 'WEIGHT' = 2 NO FLUSH.
  ENDIF.
  IF NOT P_3 IS INITIAL.
    CALL METHOD OF CELL 'BORDERS' = BORDERS
      NO FLUSH EXPORTING #1 = 3.
    SET PROPERTY OF BORDERS 'WEIGHT' = 2 NO FLUSH.
  ENDIF.
  IF NOT P_4 IS INITIAL.
    CALL METHOD OF CELL 'BORDERS' = BORDERS
      NO FLUSH EXPORTING #1 = 4.
    SET PROPERTY OF BORDERS 'WEIGHT' = 2 NO FLUSH.
  ENDIF.
ENDFORM.                               " BORD



Открывается окно excel, но после закрытия в процессах windows excel не исчезает - чего не удаляю?


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: EXCEL и процессы Windows
СообщениеДобавлено: Вс, дек 17 2006, 16:31 
Менеджер
Менеджер
Аватара пользователя

Зарегистрирован:
Пн, янв 24 2005, 16:22
Сообщения: 749
Пол: Мужской
Морской написал(а):
Код:
Code:
 
...

Открывается окно excel, но после закрытия в процессах windows excel не исчезает - чего не удаляю?



Какая версия SAP и главное Excel? Повторяется ли ситуация на других компьютерах?

Cократите код до минимального куска, который не работает. Так всем будет легче разобраться.

Попробуйте начать без NO FLASH.

_________________
Счастье есть!


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вс, дек 17 2006, 17:11 
Председатель
Председатель
Аватара пользователя

Зарегистрирован:
Чт, апр 13 2006, 12:32
Сообщения: 1503
Откуда: Питер
перед удалением объектов

CALL METHOD OF excel 'Quit'

И не понятно, почему у вас запись стоит сразу после открытия файла, а не после внесения в него изменений.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн, дек 18 2006, 08:08 
Старший специалист
Старший специалист

Зарегистрирован:
Вт, ноя 15 2005, 11:00
Сообщения: 288
sap 4.7 Office 2003
Сам вывод в excel отдельно от проги работает нормально
После долгих комментирований каждой строки проги получилось вот:
при расчете данных для вывода в excel есть строка в loop:
i_number = i_number + 1.
Объявлен как i_number type i.
Если ее закомментирую, то по закрытии excel - из процессов он исчезает, с ней - остается.
Но при выходе из транзакции все процессы excel, порожденные этой прогой, исчезают.
Наших пользователи хотят, чтобы процесс уходил по закрытию excel.
Какой-то глюк.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн, дек 18 2006, 15:24 
Специалист
Специалист

Зарегистрирован:
Пт, июн 16 2006, 11:39
Сообщения: 178
Откуда: Москва
Excel остается в процессах потому, что не закрыта рабочая книга.
Перед освобождением объекта books нужно вызывать:
CALL METHOD OF books 'Close'.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, дек 19 2006, 05:29 
Старший специалист
Старший специалист

Зарегистрирован:
Вт, ноя 15 2005, 11:00
Сообщения: 288
Не помогло.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср, дек 20 2006, 17:43 
Ассистент
Ассистент

Зарегистрирован:
Пн, сен 26 2005, 11:53
Сообщения: 46
дебажить не пробовали?
мне кажется, нужно поставить брейкпоинт на строчку
SET PROPERTY OF cell 'HorizontalAlignment' = 3."центр
и посмотреть состояние subrc. ИМХО, тут собака порылась - ранее нет никакого присвоения объекта cell. а просто первому попавшемуся абстрактному объекту выставить проперти HorizontalAlignment - это как?


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, дек 21 2006, 09:38 
Специалист
Специалист

Зарегистрирован:
Пт, июн 16 2006, 11:39
Сообщения: 178
Откуда: Москва
lsapiens написал(а):
дебажить не пробовали?
мне кажется, нужно поставить брейкпоинт на строчку
SET PROPERTY OF cell 'HorizontalAlignment' = 3."центр
и посмотреть состояние subrc. ИМХО, тут собака порылась - ранее нет никакого присвоения объекта cell. а просто первому попавшемуся абстрактному объекту выставить проперти HorizontalAlignment - это как?

Не отработает SET PROPERTY OF cell 'HorizontalAlignment' = 3.",
только как это влияет на выход из процессов Windows ? :roll:


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, дек 21 2006, 13:21 
Ассистент
Ассистент

Зарегистрирован:
Пн, сен 26 2005, 11:53
Сообщения: 46
<Yuri> написал(а):
Не отработает SET PROPERTY OF cell 'HorizontalAlignment' = 3.",
только как это влияет на выход из процессов Windows ? :roll:

Да, каюсь, не досмотрел. По инерции думал у него там обработка ошибок стоит. Тогда программа могла просто в дамп выпасть или просто завершить работу и уже не дойти до books 'Close' и excel 'Quit'.

2Морской тогда еще 1 вариант. А есть ли у пользователя права на запись(изменение) в файл(директорию). Да и вобще, просто подебажте. Это проще чем нам удаленно придумывать в чем может быть проблема.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн, фев 05 2007, 16:40 
Младший специалист
Младший специалист
Аватара пользователя

Зарегистрирован:
Вт, ноя 21 2006, 13:08
Сообщения: 61
Откуда: Kyiv
Кстати об освобождении объектов...
FREE OBJECT надо делать в обратной последовательности, в которой начинали использоваться объекты.
В примере с нотой 575877

FREE OBJECT h_cell.
FREE OBJECT h_cell1.
FREE OBJECT range.
FREE OBJECT worksheet.
FREE OBJECT workbook.
FREE OBJECT application.

Если выполнить в другой последовательности, например первым выполнить
FREE OBJECT application.
то объекты освободятся не корректно и в процессах Винды останется висеть процесс EXCEL


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн, фев 05 2007, 16:51 
Младший специалист
Младший специалист

Зарегистрирован:
Пт, июн 02 2006, 09:59
Сообщения: 67
Пол: Мужской
см. ноту 129994:


Code:
Symptom
An ABAP application which calls automation servers such as Excel or Winword and that you developed does not behave as required. If you iterate for example for an Excel table and transfer data from Excel into the R/3 System or vice versa, errors occur after a certain number of automation calls.
Additional key words
Automation, ActiveX, Excel, OLE
Cause and prerequisites
Memory bottlenecks at the frontend cause such errors since automation objects are not released with the command FREE OBJECT.
Objects with GUI versions < Release 4.5A can no longer be generated as 1024 OLE (see note 127666).
Solution
If ABAP applications are developed which control programs on the client PC by automation, then it is absolutely necessary that objects of the type OLE2_OBJECT, which are returned by CALL METHOD and GET PROPERTY calls, are released after using FREE OBJECT. Otherwise, memory bottlenecks and terminations can occur on the client PC. This particularly applies to applications which iterate for Excel tables and execute operations on a large number of CELL objects.
Notice: Every OLE object must (!) be released again immediately after being used.
Code example:
  REPORT EXCEL_EXAMPLE.
  INCLUDE OLE2INCL.
  DATA: EXCEL TYPE OLE2_OBJECT, BOOKS TYPE OLE2_OBJECT.
  DATA: BOOK TYPE OLE2_OBJECT, SHEETS TYPE OLE2_OBJECT.
  DATA: SHEET TYPE OLE2_OBJECT, CELLS TYPE OLE2_OBJECT.
  DATA: CELL TYPE OLE2_OBJECT, ROW TYPE I,VALUE TYPE I.
  CREATE OBJECT EXCEL 'excel.application'.
  CALL METHOD OF EXCEL 'workbooks' = BOOKS.
  CALL METHOD OF BOOKS 'add' = BOOK.
  CALL METHOD OF BOOK 'sheets' = SHEETS.
  CALL METHOD OF SHEETS 'item' = SHEET EXPORTING #1 = 1.
  CALL METHOD OF SHEET 'cells' = CELLS.
  SET PROPERTY OF EXCEL 'visible' = 1.
  DO 1100 TIMES.
    ADD 1 TO ROW.
* here you get the CELL object
    CALL METHOD OF CELLS 'ITEM' = CELL EXPORTING #1 = ROW #2 = 1.
*   here you use the CELL object
    SET PROPERTY OF CELL 'value' = ROW.  "write ROW to the excel cell
    GET PROPERTY OF CELL 'value' = VALUE.
*
* IMPORTANT: now you have finished to use the CELL object, so destroy
*            it
with FREE OBJECT. Otherwise it will use a lot of
*            memory
and will not work on systems < 45a after 1024th
*            CALL
METHOD OF CELLS 'ITEM' = CELL #1 = ROW #2 = 1.
*            There is a limit of 1024 OLE objects.
    FREE OBJECT CELL.
  ENDDO.
*   IMPORTANT: DO NOT FREE CELL OBJECT HERE, IT MUST BE FREED AFTER
*   USE IN THE LOOP. IF YOU FREE HERE ONLY THE LAST CELL OBJECT YOU
*   GOT WILL BE DESTROYED.
*   FREE OBJECT CELL.
  FREE OBJECT CELLS.
  FREE OBJECT SHEET.
  FREE OBJECT SHEETS.
  FREE OBJECT BOOK.
  FREE OBJECT BOOKS.
  FREE OBJECT EXCEL.
* END OF CODE
Source code corrections


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: EXCEL и процессы Windows
СообщениеДобавлено: Пт, сен 12 2014, 14:04 
Начинающий
Начинающий

Зарегистрирован:
Пт, сен 12 2014, 13:05
Сообщения: 2
Здравствуйте. Не подскажите почему не срабатывает CALL METHOD OF WORKBOOK 'CLOSE'. Если смотреть в отладке, то после его выполнения перменная sy-subrc становится =2. И я так думаю, из-за того что не срабатывает этот метод остается висеть процесс Excel.
*"----------------------------------------------------------------------
*"*"Локальный интерфейс:
*" IMPORTING
*" VALUE(FILENAME) LIKE RLGRAP-FILENAME
*" VALUE(I_BEGIN_COL) TYPE I
*" VALUE(I_BEGIN_ROW) TYPE I
*" VALUE(I_END_COL) TYPE I
*" VALUE(I_END_ROW) TYPE I
*" VALUE(I_LIST) TYPE I
*" TABLES
*" INTERN TYPE ZKCD_INTERN
*" EXCEPTIONS
*" INCONSISTENT_PARAMETERS
*" UPLOAD_OLE
*"----------------------------------------------------------------------
*{ INSERT C03K903900 1
DATA: EXCEL_TAB TYPE KCDE_SENDER.
DATA: SEPARATOR TYPE C.
FIELD-SYMBOLS: <FIELD>.
DATA: APPLICATION TYPE OLE2_OBJECT,
WORKBOOK TYPE OLE2_OBJECT,
RANGE TYPE OLE2_OBJECT,
WORKSHEET TYPE OLE2_OBJECT.
DATA: H_CELL TYPE OLE2_OBJECT.
DATA: H_CELL1 TYPE OLE2_OBJECT.

DEFINE M_MESSAGE.
CASE SY-SUBRC.
WHEN 0.
WHEN 1.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
WHEN OTHERS. RAISE UPLOAD_OLE.
ENDCASE.
END-OF-DEFINITION.

IF I_BEGIN_ROW > I_END_ROW. RAISE INCONSISTENT_PARAMETERS. ENDIF.
IF I_BEGIN_COL > I_END_COL. RAISE INCONSISTENT_PARAMETERS. ENDIF.



IF APPLICATION-HEADER = SPACE OR APPLICATION-HANDLE = -1.
CREATE OBJECT APPLICATION 'Excel.Application'.
M_MESSAGE.
ENDIF.

CALL METHOD OF APPLICATION 'Workbooks' = WORKBOOK.
M_MESSAGE.

CALL METHOD OF WORKBOOK 'Open' EXPORTING #1 = FILENAME.
M_MESSAGE.

* set property of application 'Visible' = 1.
* m_message.

CALL METHOD OF APPLICATION 'Worksheets' = WORKBOOK EXPORTING #1 = I_LIST.
M_MESSAGE.

GET PROPERTY OF APPLICATION 'ACTIVESHEET' = WORKSHEET.
M_MESSAGE.

CALL METHOD OF WORKSHEET 'Cells' = H_CELL
EXPORTING #1 = I_BEGIN_ROW #2 = I_BEGIN_COL.
M_MESSAGE.

CALL METHOD OF WORKSHEET 'Cells' = H_CELL1
EXPORTING #1 = I_END_ROW #2 = I_END_COL.
M_MESSAGE.

CALL METHOD OF WORKSHEET 'RANGE' = RANGE
EXPORTING #1 = H_CELL #2 = H_CELL1.
M_MESSAGE.

CALL METHOD OF RANGE 'SELECT'.
M_MESSAGE.

* copy to Clippboard
CALL METHOD OF RANGE 'COPY'.
M_MESSAGE.

* Without flush, CLPB_IMPORT does not find the data "SEVERING 5/99
CALL FUNCTION 'CONTROL_FLUSH' "SEVERING 5/99
EXCEPTIONS OTHERS = 3. "SEVERING 5/99

CALL FUNCTION 'CLPB_IMPORT'
TABLES
DATA_TAB = EXCEL_TAB
EXCEPTIONS
CLPB_ERROR = 1
OTHERS = 2.
IF SY-SUBRC <> 0. MESSAGE X001(KX). ENDIF.
* ASSIGN SEPARATOR TO <FIELD> TYPE 'X'. "H916967
* <FIELD> = C_HEX_TAB. "H916967
SEPARATOR = CL_ABAP_CHAR_UTILITIES=>HORIZONTAL_TAB. "H916967

PERFORM SEPARATED_TO_INTERN_CONVERT TABLES EXCEL_TAB INTERN
USING SEPARATOR.

set property OF APPLICATION 'CutCopyMode' = 0.
M_MESSAGE.

CALL METHOD OF WORKBOOK 'CLOSE'.
M_MESSAGE.
CALL METHOD OF APPLICATION 'QUIT'.
M_MESSAGE.

FREE OBJECT h_cell. m_message.

FREE OBJECT h_cell1. m_message.

FREE OBJECT RANGE. m_message.

FREE OBJECT worksheet. m_message.

FREE OBJECT workbook. m_message.

FREE OBJECT application. m_message.



*} INSERT
ENDFUNCTION.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: EXCEL и процессы Windows
СообщениеДобавлено: Пт, сен 12 2014, 22:08 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Пн, мар 28 2005, 15:38
Сообщения: 1257
opetrova: посмотрите хелп на этод метод в экселе.там вроде бы должен параметр передаваться еще. Или , как вариант, погасите вывод предупреждений(кажется это установка в 0 свойства displayalerts у аппликешена). Проблема в том, что при закрытии книг выдается предупреждение, но вы его сейчас не видете, поэтому и ошибка, мне так кажется.

_________________
Там, где я рос, единственным развлечением было запоминать число «π».(С) Н. Стивенсон


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: EXCEL и процессы Windows
СообщениеДобавлено: Пн, сен 15 2014, 10:57 
Начинающий
Начинающий

Зарегистрирован:
Пт, сен 12 2014, 13:05
Сообщения: 2
Спасибо за помощь)). Решила проблему след. образом: я объект WORKBOOK, получается использовала 2 раза CALL METHOD OF APPLICATION 'Workbooks' = WORKBOOK. и CALL METHOD OF APPLICATION 'Worksheets' = WORKBOOK EXPORTING #1 = I_LIST. И наверно так нельзя делать. Изменила во втором методе (CALL METHOD OF APPLICATION 'Worksheets' = WORKBOOK EXPORTING #1 = I_LIST) WORKBOOK на WORKBOOKL (можно было и любое другое название придумать :) ) и все заработало, выполнился метод CALL METHOD OF WORKBOOK 'CLOSE'. и перестал висеть процесс EXCEL. Может быть можно было как то освождать объект с помощью FREE OBJECT workbook., но я пробовала, не помогало, книга все равно не закрывалась. Вообщем на данном этапе своих знаний(а они у меня очень слабенькие) оставляю так :oops:


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

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


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

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


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

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