* Workbook
PARAMETERS: p_wb RADIOBUTTON GROUP grp DEFAULT 'X'.
* Sharedstrings
PARAMETERS: p_str RADIOBUTTON GROUP grp.
* Sheetpart
PARAMETERS: p_sh RADIOBUTTON GROUP grp.
* Tablepart
PARAMETERS: p_tab RADIOBUTTON GROUP grp.
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.
* 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 ).
**********************************************************************
* Excel-Objekt
**********************************************************************
DATA(o_excel) = cl_xlsx_document=>load_document( lv_bin_data ).
DATA(o_workbook) = o_excel->get_workbookpart( ).
DATA(lv_workbook_xstr) = o_workbook->get_data( ).
DATA(o_sharedstrings) = o_workbook->get_sharedstringspart( ).
DATA(lv_sharedstrings_xstr) = o_sharedstrings->get_data( ).
DATA(o_sheets) = o_workbook->get_worksheetparts( ).
IF o_sheets->get_count( ) > 0.
DATA(o_sheet) = CAST cl_xlsx_worksheetpart( o_sheets->get_part( 0 ) ).
DATA(lv_sheet_xstr) = o_sheet->get_data( ).
DATA(o_tables) = o_sheet->get_tableparts( ).
IF o_tables->get_count( ) > 0.
DATA(o_table) = CAST cl_xlsx_tablepart( o_tables->get_part( 0 ) ).
DATA(lv_table_xstr) = o_table->get_data( ).
ENDIF.
ENDIF.
* XML Doc
DATA(o_doc) = NEW cl_xml_document( ).
* xstring --> xml
CASE abap_true.
WHEN p_wb.
o_doc->parse_xstring( lv_workbook_xstr ).
WHEN p_str.
o_doc->parse_xstring( lv_sharedstrings_xstr ).
WHEN p_sh.
o_doc->parse_xstring( lv_sheet_xstr ).
WHEN p_tab.
o_doc->parse_xstring( lv_table_xstr ).
ENDCASE.
* Inhalt des XML-Documents in string wandeln
o_doc->render_2_string( EXPORTING pretty_print = abap_true
IMPORTING retcode = DATA(lv_rc2)
size = DATA(lv_size2)
stream = DATA(lv_xml) ).
IF lv_rc2 = 0.
* XML-String anzeigen
cl_soap_xml_helper=>xml_show( sdoc = lv_xml
html = abap_true
title = 'XML Anzeige' ).
ENDIF.
ENDIF.
ENDIF.
CATCH cx_root INTO DATA(e_text).
MESSAGE e_text->get_text( ) TYPE 'S' DISPLAY LIKE 'E'.
ENDTRY.