* Dummy-Screen für cl_gui_container=>default_screen deklarieren
SELECTION-SCREEN BEGIN OF SCREEN 100.
SELECTION-SCREEN END OF SCREEN 100.
START-OF-SELECTION.
TRY.
DATA: lv_rc TYPE i.
DATA: it_files TYPE filetable.
DATA: lv_action TYPE i.
* FileOpen-Dialog aufrufen
cl_gui_frontend_services=>file_open_dialog( EXPORTING
file_filter = |xlsx (*.xlsx)\|*.xlsx\|{ cl_gui_frontend_services=>filetype_all }|
CHANGING
file_table = it_files
rc = lv_rc
user_action = lv_action ).
IF lv_action = cl_gui_frontend_services=>action_ok.
* wenn Datei ausgewählt wurde
IF lines( it_files ) > 0.
DATA: o_oic TYPE REF TO i_oi_container_control.
DATA: o_oid TYPE REF TO i_oi_document_proxy.
DATA: o_err TYPE REF TO i_oi_error.
c_oi_container_control_creator=>get_container_control( IMPORTING
control = o_oic
error = o_err ).
IF abap_true = o_err->has_succeeded.
o_oic->init_control( EXPORTING
inplace_enabled = abap_true
no_flush = abap_true
r3_application_name = 'Excel Tabelle'
parent = cl_gui_container=>default_screen
IMPORTING
error = o_err ).
IF abap_true = o_err->has_succeeded.
o_oic->get_document_proxy( EXPORTING
document_type = soi_doctype_excel_sheet " 'Excel.Sheet'
IMPORTING
document_proxy = o_oid
error = o_err ).
IF abap_true = o_err->has_succeeded.
* URL muss für das Laden eines lokalen Files mit 'FILE://' beginnen
DATA(lv_file) = 'FILE://' && it_files[ 1 ]-filename.
* *.xlsx von URL (File) laden und anzeigen
o_oid->open_document( EXPORTING
document_title = 'Excel'
document_url = CONV swk_url( lv_file )
open_inplace = abap_true
IMPORTING
error = o_err ).
IF abap_true = o_err->has_succeeded.
* leere Toolbar ausblenden
cl_abap_list_layout=>suppress_toolbar( ).
* cl_gui_container=>default_screen erzwingen
CALL SCREEN 100.
* Schließen eines Dokuments in der Office-Anwendung
o_oid->close_document( IMPORTING error = o_err ).
IF o_err->has_succeeded = abap_true.
* Schließen eines Visual-Basic-Dokuments
o_oid->close_activex_document( IMPORTING error = o_err ).
IF o_err->has_succeeded = abap_true.
* Freigabe des für das Dokument reservierten Speichers
o_oid->release_document( IMPORTING error = o_err ).
IF o_err->has_succeeded = abap_true.
FREE: o_oid.
ENDIF.
ENDIF.
ENDIF.
* baut das Control ab
o_oic->destroy_control( IMPORTING error = o_err ).
IF o_err->has_succeeded = abap_true.
FREE: o_oic.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
CATCH cx_root INTO DATA(e_txt).
WRITE: / e_txt->get_text( ).
ENDTRY.