[ABAP] ABAP2XLSX: Inhalt einer Worksheet in eine interne Tabelle schreiben

* einfaches, generisches Beispiel für die Ausgabe mit Hilfe von Stringspalten
TYPES: BEGIN OF ty_s_stringtab,
         col1 TYPE string,
         col2 TYPE string,
         col3 TYPE string,
       END OF ty_s_stringtab.

TYPES: ty_it_stringtab TYPE STANDARD TABLE OF ty_s_stringtab WITH DEFAULT KEY.

**********************************************************************
* Selektionsbild
**********************************************************************
PARAMETERS: p_fname TYPE file_table-filename OBLIGATORY.

* wenn die F4-Hilfe für den Dateinamen aufgerufen wird
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_fname.

  DATA: lv_rc TYPE i.
  DATA: it_files TYPE filetable.
  DATA: lv_action TYPE i.

* File-Tabelle leeren, da hier noch alte Einträge von vorherigen Aufrufen drin stehen können
  CLEAR it_files.

* FileOpen-Dialog aufrufen
  TRY.
      cl_gui_frontend_services=>file_open_dialog( EXPORTING file_filter    = |xlsx (*.xlsx)\|*.xlsx\|{ cl_gui_frontend_services=>filetype_all }|
                                                            multiselection = abap_false
                                                  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
          p_fname = it_files[ 1 ]-filename.
        ENDIF.
      ENDIF.

    CATCH cx_root INTO DATA(e_text).
      MESSAGE e_text->get_text( ) TYPE 'I'.
  ENDTRY.

**********************************************************************
* START-OF-SELECTION
**********************************************************************
START-OF-SELECTION.

  DATA: it_stringtab TYPE ty_it_stringtab.

  TRY.
* Reader-Objekt erzeugen
      DATA(o_reader) = CAST zif_excel_reader( NEW zcl_excel_reader_2007( ) ).
      DATA(o_excel) = o_reader->load_file( p_fname ).

* Worksheet mit Index 1
      DATA(o_worksheet) = o_excel->get_worksheet_by_index( iv_index = 1 ).

* Inhalt der Worksheet in iTab mappen
* Voraussetzung ist die korrekte Abbildung der Ausgabedaten in der itab (Datentypen, Anzahl Spalten)
* falls es hier zu Konvertierungsfehlern kommt (float-Werte usw.), dann bricht die Funktion ab
      o_worksheet->get_table( EXPORTING iv_skip_bottom_empty_rows = abap_true
                              IMPORTING et_table                  = it_stringtab ).

      cl_demo_output=>write_data( it_stringtab ).

* HTML-Code vom Demo-Output holen
      DATA(lv_html) = cl_demo_output=>get( ).

* Daten im Inline-Browser im SAP-Fenster anzeigen
      cl_abap_browser=>show_html( EXPORTING title       = 'Daten'
                                            html_string = lv_html
                                            container   = cl_gui_container=>default_screen ).

* cl_gui_container=>default_screen erzwingen
      WRITE: space.
    CATCH cx_root INTO DATA(e_txt).
      WRITE: / e_txt->get_text( ).
  ENDTRY.