При помощи этой темы сделал копирование sheets, так большой сенькс авторам.
Новый вставляется слева от активного, если не передано имя исходного листа - копируется текущий.
Code:
methods COPY_SPREADSHEET
importing
!SOURCE type SOI_FIELD_NAME optional
!NAME type SOI_FIELD_NAME
exceptions
SOURCE_NOT_EXIST
DESTINATION_ALREADY_EXISTS .
updated
Code:
DATA: h_handle TYPE cntl_handle,
h_appl TYPE ole2_object,
h_sheets TYPE ole2_object,
h_active TYPE ole2_object.
DATA: l_active TYPE soi_field_name,
l_source TYPE soi_field_name.
DATA: lt_sheets TYPE soi_sheets_table.
CALL METHOD spreadsheet_interface->get_sheets
IMPORTING
sheets = lt_sheets.
CALL METHOD spreadsheet_interface->get_active_sheet
IMPORTING
sheetname = l_active.
*--- проверить, что источник существует
IF source IS NOT SUPPLIED.
l_source = l_active.
ELSE.
READ TABLE lt_sheets WITH KEY sheet_name = source
TRANSPORTING NO FIELDS.
IF sy-subrc <> 0.
RAISE source_not_exist.
ENDIF.
l_source = source.
ENDIF.
*--- проверить, что новое имя еще не используется
READ TABLE lt_sheets WITH KEY sheet_name = name
TRANSPORTING NO FIELDS.
IF sy-subrc = 0.
RAISE destination_already_exists.
ENDIF.
*-- указатель на ole объект
CALL METHOD document_proxy->get_document_handle
IMPORTING
handle = h_handle.
DO 1 TIMES.
GET PROPERTY OF h_handle-obj 'Application' = h_appl.
CHECK sy-subrc = 0.
*---- указатель на копируемый лист
CALL METHOD OF h_appl 'SHEETS' = h_sheets
EXPORTING
#1 = l_source.
CHECK sy-subrc = 0.
*----скопировать, вставив слева от активного
GET PROPERTY OF h_sheets 'COPY' = l_active
exporting
#1 = h_active.
CHECK sy-subrc = 0.
*----переименовать
GET PROPERTY OF h_appl 'ActiveSheet' = h_active.
CHECK sy-subrc = 0.
SET PROPERTY OF h_active 'Name' = name.
CHECK sy-subrc = 0.
ENDDO.
FREE OBJECT:
h_appl,
h_sheets,
h_active.
ENDMETHOD.
Как вставлять после текущей я так и не понял ;(