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.
* ersten Tabelleneintrag lesen
DATA: lv_filesize TYPE w3param-cont_len.
DATA: lv_filetype TYPE w3param-cont_type.
DATA: it_bin_data TYPE w3mimetabtype.
* Excel-Datei auf Appl. Server hochladen (binary)
cl_gui_frontend_services=>gui_upload( EXPORTING filename = |{ it_files[ 1 ]-filename }|
filetype = 'BIN'
IMPORTING filelength = lv_filesize
CHANGING data_tab = it_bin_data ).
* solix -> xstring
DATA(lv_bin_data) = cl_bcs_convert=>solix_to_xstring( it_solix = it_bin_data ).
* XLSX Handling: Kapselt cl_xlsx_document
DATA(o_excel) = cl_ehfnd_xlsx=>get_instance( ).
* XLSX Workbook (XString --> XML)
DATA(o_doc) = o_excel->load_doc( iv_file_data = lv_bin_data ).
* XLSX Sheets des Workbooks holen
DATA(it_sheets) = o_doc->get_sheets( ).
LOOP AT it_sheets ASSIGNING FIELD-SYMBOL(<sheet>).
WRITE: / <sheet>-name, <sheet>-sheet_id, <sheet>-rid.
ENDLOOP.
ULINE.
* XLSX Sheet: erste Sheet holen
DATA(o_sheet) = o_doc->get_sheet_by_id( iv_sheet_id = 1 ).
* max. Zeilenzahl der Sheet
DATA(lv_maxrow) = o_sheet->get_last_row_number( ).
DATA(lv_row) = 1.
DO lv_maxrow TIMES.
* max. Spaltenzahl der akt. Zeile
DATA(lv_cols_in_row) = o_sheet->get_last_column_number_in_row( lv_row ).
DATA(lv_col) = 1.
DO lv_cols_in_row TIMES.
* Inhalt der akt. Zelle
DATA(lv_value) = o_sheet->get_cell_content( EXPORTING iv_row = lv_row
iv_column = lv_col ).
WRITE: lv_value.
lv_col = lv_col + 1.
ENDDO.
lv_row = lv_row + 1.
WRITE: /.
ENDDO.
ENDIF.
ENDIF.
CATCH cx_root INTO DATA(e_text).
MESSAGE e_text->get_text( ) TYPE 'S' DISPLAY LIKE 'E'.
ENDTRY.