Interne Tabelle in HTML umwandeln

Neben dem CSV Format, das manchmal etwas wiederspenstig sein kann, wenn es z. B. um die Trennzeichen geht funktioniert bei Excel auch der Trick eine HTML Tabelle in eine Textdatei zu schreiben und die Endung auf .xls zu ändern.

Mit dem folgenden Code kann man eine interne Tabelle in eine HTML Tabelle umwandeln.

TYPES: tt_soli TYPE TABLE OF soli.

FORM itab2html
  TABLES
    pt_source TYPE STANDARD TABLE
    pt_target TYPE tt_soli
  USING
    p_tabname TYPE tabname
    p_with_header TYPE char01.
  DATA: ls_line TYPE soli.
  DATA: ls_field TYPE text80.
  DATA: ls_record TYPE zako_records.
  DATA: ls_dd03l TYPE dd03l.
  DATA: lt_dd03l TYPE TABLE OF dd03l.
  FIELD-SYMBOLS: <field> TYPE ANY.
  SELECT * FROM dd03l INTO TABLE lt_dd03l
    WHERE tabname = p_tabname.
  IF sy-subrc = 0.
    MOVE '<table>' TO ls_line.
    APPEND ls_line TO pt_target.
    "==== Header ausgeben
    IF p_with_header = 'X'.
      MOVE '<tr>' TO ls_line.
      APPEND ls_line TO pt_target.
      LOOP AT lt_dd03l INTO ls_dd03l.
        CLEAR ls_line.
        CONCATENATE '<th>' ls_dd03l-fieldname '</th>'
          INTO ls_line.
        APPEND ls_line TO pt_target.
      ENDLOOP.
      MOVE '</tr>' TO ls_line.
      APPEND ls_line TO pt_target.
    ENDIF.
    "==== Zeilen ausgeben
    LOOP AT pt_source INTO ls_record.
      MOVE '<tr>' TO ls_line.
      APPEND ls_line TO pt_target.
      " ==== Felder ausgeben
      LOOP AT lt_dd03l INTO ls_dd03l.
        ASSIGN COMPONENT ls_dd03l-fieldname
          OF STRUCTURE ls_record TO <field>.
        " ==== Umwandlung in String
        " ==== TODO Umwandlung abhängig vom Datentype
        WRITE <field> TO ls_field.
        " ==== Tabellenzeile schreiben
        CONCATENATE '<td>' ls_field '</td>' INTO ls_line.
        APPEND ls_line TO pt_target.
      ENDLOOP.
      MOVE '</tr>' TO ls_line.
      APPEND ls_line TO pt_target.
    ENDLOOP.
    MOVE '</table>' TO ls_line.
    APPEND ls_line TO pt_target.
  ENDIF.
ENDFORM.

Bei grossen Datenmengen sollte man die hier beschriebene Funktion nutzen um die Daten zu komprimieren. Eventuell muss man die Datentypen (Länge der Textfelder) dazu noch anpassen.