ereglam hat geschrieben: ↑23.03.2022 15:07Hallo Lisa,
schau Dir mal das Beispiel Excel Export an.
Das könnte Dir helfen.
Speichern muss man es dabei mit OPEN/TRANSFER DATASET IN BINARY MODE...
Hallo ereglam,ereglam hat geschrieben: ↑23.03.2022 15:07Hallo Lisa,
schau Dir mal das Beispiel Excel Export an.
Das könnte Dir helfen.
Speichern muss man es dabei mit OPEN/TRANSFER DATASET IN BINARY MODE...
Code: Alles auswählen.
PARAMETERS: p_file TYPE c LENGTH 55 OBLIGATORY LOWER CASE DEFAULT '/usr/sap/trans/abc.xlsx'.
TRY.
* Testdaten lesen
SELECT vbeln erdat erzet ernam FROM vbak
INTO CORRESPONDING FIELDS OF TABLE gt_vbak.
IF sy-subrc = 0.
* Header erzeugen
DATA: it_columns TYPE if_fdt_doc_spreadsheet=>t_column.
DATA: lv_head TYPE t001.
DATA(o_desc) = CAST cl_abap_structdescr( cl_abap_structdescr=>describe_by_data( lv_head ) ).
LOOP AT o_desc->get_components( ) ASSIGNING FIELD-SYMBOL(<c>).
IF <c> IS ASSIGNED.
IF <c>-type->kind = cl_abap_typedescr=>kind_elem.
APPEND VALUE #( id = sy-tabix
name = <c>-name
display_name = <c>-name
is_result = abap_true
type = <c>-type ) TO it_columns.
ENDIF.
ENDIF.
ENDLOOP.
* itab + header -> XML -> xstring
* Achtung: Speicherintensiv und rel. langsam! Es sollten keine großen Datenmengen verarbeitet werden.
DATA(lv_bin_data) = cl_fdt_xl_spreadsheet=>if_fdt_doc_spreadsheet~create_document( columns = it_columns " optional
itab = REF #( gt_vbak )
iv_call_type = if_fdt_doc_spreadsheet=>gc_call_dec_table ).
IF xstrlen( lv_bin_data ) > 0.
OPEN DATASET p_file FOR OUTPUT IN BINARY MODE.
IF sy-subrc EQ 0.
TRANSFER lv_bin_data TO p_file.
CLOSE DATASET p_file.
ENDIF.
ENDIF.
ENDIF.
ENDTRY.
Folgende Benutzer bedankten sich beim Autor PeterPaletti für den Beitrag:
lisa
Hallo ereglam,ereglam hat geschrieben: ↑23.03.2022 18:17Hallo Lisa,
hast Du versucht, die Datei in der AL11 zu öffnen? Das kann natürlich nicht funktionieren, weil die AL11 dafür nicht gedacht ist.
Du musst Dir Zugriff auf das Serververzeichnis außerhalb von SAP verschaffen oder die Datei z.B. mittels CG3Y herunterladen.
Wenn's das nicht ist, musst Du genauer erklären, wie Du versucht hast, die Datei zu öffnen.
PS:
benutze bitte für die Typisierung von P_FILE z.B. PATH-PATHEXTERN ...
TYPE c LENGTH n ist zwar technisch richtig, aber man sollte Typen verwenden, die eine Bedeutung hat. Zum Teil bekommt man dann auch Wertehilfen gratis dazu... (hier leider nicht)
Code: Alles auswählen.
DATA: it_columns TYPE if_fdt_doc_spreadsheet=>t_column.
DATA: lv_head TYPE VBAK. "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
DATA(o_desc) = CAST cl_abap_structdescr( cl_abap_structdescr=>describe_by_data( lv_head ) ).
Hallo PeterPaletti,PeterPaletti hat geschrieben: ↑25.03.2022 10:52Ja, das habe ich dir bereits geschrieben.
Du hast eine interne Tabelle von der Struktur VBAK und presst die ins Satzbett von T001. Das gibt Murks.
Du musst lv_head nicht mit t001 typisieren, sondern mit VBAK, sonst passt die Strukturbeschreibung nicht auf die VBAK.
Code: Alles auswählen.
DATA: it_columns TYPE if_fdt_doc_spreadsheet=>t_column. DATA: lv_head TYPE VBAK. "!!!!!!!!!!!!!!!!!!!!!!!!!!!!! DATA(o_desc) = CAST cl_abap_structdescr( cl_abap_structdescr=>describe_by_data( lv_head ) ).
Code: Alles auswählen.
IF <c>-type->kind = cl_abap_typedescr=>kind_elem.
Code: Alles auswählen.
DATA gt_vbak TYPE TABLE OF vbak.
PARAMETERS: p_file TYPE path-pathextern OBLIGATORY LOWER CASE DEFAULT '/usr/sap/trans/def.xlsx'.
TRY.
* Testdaten lesen
SELECT vbeln erdat erzet ernam FROM vbak
INTO CORRESPONDING FIELDS OF TABLE gt_vbak.
IF sy-subrc = 0.
*
DATA: lv_bin_data TYPE xstring.
* Creates XLS fom the ITAB
edx_util=>create_xls_from_itab( EXPORTING i_xlsx = abap_true
IMPORTING e_xstring = lv_bin_data
CHANGING ct_data = gt_vbak ).
IF xstrlen( lv_bin_data ) > 0.
OPEN DATASET p_file FOR OUTPUT IN BINARY MODE.
IF sy-subrc EQ 0.
TRANSFER lv_bin_data TO p_file.
CLOSE DATASET p_file.
ENDIF.
ENDIF.
ENDIF.
ENDTRY.
Folgende Benutzer bedankten sich beim Autor PeterPaletti für den Beitrag:
lisa
PeterPaletti hat geschrieben: ↑25.03.2022 12:09Oder aber oder, man lässt verwendet die Klasse edx_util. Dann kann man die Sache mit der Strukturbeschreibung auch weglassen.
Code: Alles auswählen.
DATA gt_vbak TYPE TABLE OF vbak. PARAMETERS: p_file TYPE path-pathextern OBLIGATORY LOWER CASE DEFAULT '/usr/sap/trans/def.xlsx'. TRY. * Testdaten lesen SELECT vbeln erdat erzet ernam FROM vbak INTO CORRESPONDING FIELDS OF TABLE gt_vbak. IF sy-subrc = 0. * DATA: lv_bin_data TYPE xstring. * Creates XLS fom the ITAB edx_util=>create_xls_from_itab( EXPORTING i_xlsx = abap_true IMPORTING e_xstring = lv_bin_data CHANGING ct_data = gt_vbak ). IF xstrlen( lv_bin_data ) > 0. OPEN DATASET p_file FOR OUTPUT IN BINARY MODE. IF sy-subrc EQ 0. TRANSFER lv_bin_data TO p_file. CLOSE DATASET p_file. ENDIF. ENDIF. ENDIF. ENDTRY.