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.