Posted: Mon Oct 08, 2007 10:26 am Post subject: Проблема при повторном открытии Excel
Из ALV отчета открываю по кнопке Excel для формирования документа по отдельной позиции. Открывается нормально. Закрываю Excel и снова перехожу в ALV. Нажимаю кнопку для формирования документа для второй позиции, Excel открывается, но поля не заполняются. В чем может быть дело?
На 95% причины ошибки в том, что остался в памяти предыдущий экземпляр Excel.
Проверь, что освобождаются все OLE2 объекты после использования, и что важно, нет повтороного использования еще не освобожденных объектов.
Code:
TYPE-POOLS: OLE2 .
DATA: H_EXCEL TYPE OLE2_OBJECT, " Excel object
H_MAPL TYPE OLE2_OBJECT, " list of workbooks
H_SHEET TYPE OLE2_OBJECT,
RANGE TYPE OLE2_OBJECT.
CREATE OBJECT H_EXCEL 'EXCEL.APPLICATION'.
SET PROPERTY OF H_EXCEL 'Visible' = 1.
CALL METHOD OF H_EXCEL 'Workbooks' = H_MAPL.
CALL METHOD OF H_MAPL 'Open'
EXPORTING
#1 = 'C:\Temp\text.xls'.
CALL METHOD OF H_EXCEL 'WORKSHEETS' = H_SHEET
EXPORTING
#1 = 1. "первая по счету страница
* change name of sheet
SET PROPERTY OF H_SHEET 'NAME' = 'Items Overview'.
CALL METHOD OF H_SHEET 'Activate'.
CALL METHOD OF H_SHEET 'RANGE' = RANGE
EXPORTING
#1 = 'A1:A1'.
На 95% причины ошибки в том, что остался в памяти предыдущий экземпляр Excel.
Проверь, что освобождаются все OLE2 объекты после использования, и что важно, нет повтороного использования еще не освобожденных объектов.
Code:
У меня похожая проблема, Но я в конце работы программы делаю FREE всех объектов, у пользователя файл открывается только из моей программы, а потом после того как он жмет СОХРАНИТЬ КАК и выходит, открыть повторно получается только если почистить процессы.....
Age: 165 Joined: 04 Oct 2007 Posts: 1218 Location: Санкт-Петербург
Posted: Fri Jan 23, 2009 10:23 pm Post subject:
Все равно дело в неосвобождении объектов.
Нужно освобождать в обратной последовательности от создания.
Причем, часто создают несколько раз объект с тем же именем, забыв сделать free object, что приводит к перетиранию ссылки на объект. Например, получили ссылку на объект ячейка, провери с ней операцию. Потом снова получили ссылку на другую ячейку в тот же самый указатель, а нужно было предварительно удалить его через free object.
Освобождать объекты желательно сразу, после использования, в этой же подпрограмме, чтобы избежать ошибок с перетиранием ссылок.
Хорошо, а то я уже погрязла в free object
к сожалению программа - под названием без 100 грамм не разобраться - потому что моя первая по выгрузке в Ex
в основной программе идут вызовы двух процедур по работе с Ex:
Code:
CREATE OBJECT H_EXCEL 'EXCEL.APPLICATION'.
SET PROPERTY OF H_EXCEL 'Visible' = 0.
CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
EXPORTING
TEXT = 'Идет выгрузка в Эксель...'
EXCEPTIONS
OTHERS = 1.
CALL METHOD OF H_EXCEL 'Cells' = H_ZL EXPORTING #1 = I #2 = J.
PERFORM ERR_HDL.
SET PROPERTY OF H_ZL 'Value' = VAL .
PERFORM ERR_HDL.
GET PROPERTY OF H_ZL 'Font' = H_F.
FREE OBJECT H_ZL.
PERFORM ERR_HDL.
SET PROPERTY OF H_F 'Bold' = BOLD .
PERFORM ERR_HDL.
if ( SIze <> 0 ).
SET PROPERTY OF H_F 'Size' = Size .
PERFORM ERR_HDL.
endif.
FREE OBJECT H_F.
ENDFORM.
FORM selec USING P_TOP_1
P_LEFT_1
P_TOP_2
P_LEFT_2
clr
wid
en.
CALL METHOD OF h_excel 'Cells' = o_cells.
CALL METHOD OF o_cells 'Select'.
FREE OBJECT o_cells.
***установка цвета****
if ( clr <> 0 ).
GET PROPERTY OF o_range 'Interior' = o_interior.
SET PROPERTY OF o_interior 'ColorIndex' = clr .
FREE OBJECT o_interior.
endif.
*** установка ширины****
if ( wid <> 0 ).
GET PROPERTY OF o_range 'Columns' = o_column.
FREE OBJECT o_range.
SET PROPERTY OF o_column 'ColumnWidth' = wid .
FREE OBJECT o_column.
endif.
***ОБЪЕДИНЯЕМ СТОЛБЦЫ***
if ( en = 3 ).
CALL METHOD OF o_range 'Merge'.
if p_top_1 >= 7.
CALL METHOD OF o_range 'Borders' = o_borders
EXPORTING
#1 = 9.
FREE OBJECT o_range.
SET PROPERTY OF o_borders 'LineStyle' = 1.
SET PROPERTY OF o_borders 'Weight' = -4138.
FREE OBJECT o_borders.
endif.
endif.
***ОКОНЧАТЕЛЬНОЕ ФОРМАТИРОВАНИЕ ВЫДЕЛЯЕМ ТОЛЬКО ТАБЛИЦУ***
if ( en = 2 ).
GET PROPERTY OF o_range 'Font' = H_F.
PERFORM ERR_HDL.
SET PROPERTY OF H_F 'Size' = 8 .
free object h_f.
** граница
CALL METHOD OF o_range 'Borders' = o_borders
EXPORTING
#1 = 7.
SET PROPERTY OF o_borders 'LineStyle' = 1.
SET PROPERTY OF o_borders 'Weight' = -4138.
" SET PROPERTY OF o_borders 'ColorIndex' = l_brd_color.
free object o_borders.
CALL METHOD OF o_range 'Borders' = o_borders
EXPORTING
#1 = 11.
SET PROPERTY OF o_borders 'LineStyle' = 1.
SET PROPERTY OF o_borders 'Weight' = -4138.
free object o_borders.
CALL METHOD OF o_range 'Borders' = o_borders
EXPORTING
#1 = 10.
SET PROPERTY OF o_borders 'LineStyle' = 1.
SET PROPERTY OF o_borders 'Weight' = -4138.
free object o_borders.
CALL METHOD OF o_range 'Borders' = o_borders
EXPORTING
#1 = 8.
SET PROPERTY OF o_borders 'LineStyle' = 1.
SET PROPERTY OF o_borders 'Weight' = -4138.
free object o_borders.
CALL METHOD OF o_range 'Borders' = o_borders
EXPORTING
#1 = 9.
FREE OBJECT o_range.
SET PROPERTY OF o_borders 'LineStyle' = 1.
SET PROPERTY OF o_borders 'Weight' = -4138.
FREE OBJECT o_borders.
FREE OBJECT H_F.
endif.
***ОКОНЧАТЕЛЬНОЕ ФОРМАТИРОВАНИЕ ВЫДЕЛЯЕМ ВСЕ***
if ( en = 1 ).
SET PROPERTY OF o_range 'HorizontalAlignment' = -4108.
SET PROPERTY OF o_range 'NumberFormat' = '#,##0'.
FREE OBJECT o_range.
endif.
***Печатаем жирным***
if ( en = 4 ).
GET PROPERTY OF o_range 'Font' = H_F.
FREE OBJECT o_range.
PERFORM ERR_HDL.
SET PROPERTY OF H_F 'Bold' = 1 .
FREE OBJECT H_F.
endif.
** Горизонтальные границы
if ( en = 5 ).
CALL METHOD OF o_range 'Borders' = o_borders
EXPORTING
#1 = 8.
SET PROPERTY OF o_borders 'LineStyle' = 1.
SET PROPERTY OF o_borders 'Weight' = -4138.
FREE OBJECT o_borders.
CALL METHOD OF o_range 'Borders' = o_borders
EXPORTING
#1 = 12.
FREE OBJECT o_range.
SET PROPERTY OF o_borders 'LineStyle' = 1.
SET PROPERTY OF o_borders 'Weight' = -4138.
FREE OBJECT o_borders.
Огромное Вам спасибо, что помогли - я тщательно просмотрела всю программу - сделала освобождение объектов в нужном порядке - и теперь все работает - за что Вам БОЛЬШОЕ спасибо
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum You cannot attach files in this forum You can download files in this forum
All product names are trademarks of their respective companies. SAPNET.RU websites are in no way affiliated with SAP AG. SAP, SAP R/3, R/3 software, mySAP, ABAP, BAPI, xApps, SAP NetWeaver and any other are registered trademarks of SAP AG. Every effort is made to ensure content integrity. Use information on this site at your own risk.