Interne Tabelle als Excel Datei im Hintergrund speichern

Getting started ... Alles für einen gelungenen Start.
11 Beiträge • Seite 1 von 1
11 Beiträge Seite 1 von 1

Interne Tabelle als Excel Datei im Hintergrund speichern

Beitrag von lisa (ForumUser / 53 / 8 / 1 ) »
Hallo zusammen,

ich möchte die Daten von einer internen Tabelle als Excel Datei im Hintergrund speichern, weil ich ein Job dafür einplanen möchte. Mit open Dataset kann man nur als csv Datei und nicht als xlsx speichern. Ich möchte abap2xlsx nicht benutzen, weil ich das Paket installieren muss und die Genehmigung von meiner Firma dafür holen müsste. Welchen Befehl außer "open dataset" kann man nehmen, um das Problem zu lösen?

Tausend Mal Dank!

Viele Grüße

Lisa

gesponsert
Stellenangebote auf ABAPforum.com schalten
kostenfrei für Ausbildungsberufe und Werksstudenten


Re: Interne Tabelle als Excel Datei im Hintergrund speichern

Beitrag von ereglam (Top Expert / 1829 / 2 / 7 ) »
Hallo 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...
Gruß
Ereglam


May the Force be with your code
|| .| |.|| | .... . ..|. ||| .|. |.|. . |... . .|| .. | .... |.|| ||| ..| .|. |.|. ||| |.. .

Re: Interne Tabelle als Excel Datei im Hintergrund speichern

Beitrag von lisa (ForumUser / 53 / 8 / 1 ) »
ereglam hat geschrieben:
23.03.2022 15:07
Hallo 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...
ereglam hat geschrieben:
23.03.2022 15:07
Hallo 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,

vielen Dank für die schnelle Antwort. Ich habe es probiert und hat leider nicht geklappt. Die Excel Datei wurde auf dem SAP Server erzeugt, aber man kann die Datei nicht öffnen. Eine Fehlermeldung ist aufgetreten: " Die Datei abc.xlsx ist keine Textdatei". was habe ich falsch gemacht?
Hier ist mein Coding:

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.

Viele Grüße

Lisa

Re: Interne Tabelle als Excel Datei im Hintergrund speichern

Beitrag von ereglam (Top Expert / 1829 / 2 / 7 ) »
Hallo 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)

Folgende Benutzer bedankten sich beim Autor ereglam für den Beitrag:
lisa

Gruß
Ereglam


May the Force be with your code
|| .| |.|| | .... . ..|. ||| .|. |.|. . |... . .|| .. | .... |.|| ||| ..| .|. |.|. ||| |.. .

Re: Interne Tabelle als Excel Datei im Hintergrund speichern

Beitrag von PeterPaletti (Specialist / 348 / 32 / 97 ) »
Ich habe es ausprobiert, bei mir funzt es mit den Verbesserungsvorschlägen von ereglam.
Allerdings muss du lv_head nicht mit t001 typisieren, sondern mit VBAK, sonst passt die Strukturbeschreibung nicht auf die VBAK.

Folgende Benutzer bedankten sich beim Autor PeterPaletti für den Beitrag:
lisa


Re: Interne Tabelle als Excel Datei im Hintergrund speichern

Beitrag von lisa (ForumUser / 53 / 8 / 1 ) »
ereglam hat geschrieben:
23.03.2022 18:17
Hallo 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)
Hallo ereglam,

vielen Dank für die Empfehlung mit der Typisierung. Du hast es völlig recht.
Wie du richtig vermutet hast, das ich mit AL11 die Excel Datei geöffnet habe und es leider nicht funktioniert hat. Aber mit CG3Y konnte ich tatsächlich die Excel Datei öffnen. Nur ich habe gemerkt, dass nicht alle Felder von VBAK auf der Excel Datei gespeichert wurden. Viele Spalten von vbak mit Daten sind auf der Excel Datei nicht zu sehen. Im Anhang sieht man die Execel Datei nur bis Spalte DL (Spalte _DATAAGING von vbak, siehe Bild1). In der vbak Tabelle (siehe Bild 2) gibt es die Daten bis die Spalte VSTElkombi (das ist eine Z Spalte). Einige SAP Spalten und komplette Z Spalten mit Daten fehlen in der Excel Datei. Wenn nicht alle Daten in die Excel Datei übertragen werden können, dann bringt es auch nichts. Hast du oder jemand so was schon mal erlebt?

Vielen Dank noch mal für eure Unterstützung.

Viele Grüße

Lisa
Zuletzt geändert von lisa am 25.03.2022 11:16, insgesamt 4-mal geändert.

Re: Interne Tabelle als Excel Datei im Hintergrund speichern

Beitrag von PeterPaletti (Specialist / 348 / 32 / 97 ) »
Ja, 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 ) ).

Re: Interne Tabelle als Excel Datei im Hintergrund speichern

Beitrag von lisa (ForumUser / 53 / 8 / 1 ) »
PeterPaletti hat geschrieben:
25.03.2022 10:52
Ja, 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 ) ).
Hallo PeterPaletti,

gut aufgepasst. Ich habe das korrigiert. Aber trotzdem wurden nicht alle Felder von vbak in die Excel Datei mit CG3Y übertragen. Sehr schade. Kann es sein, dass nur max bestimmte Spalten in die Excel Datei übertragen werden können?

Viele Grüße

Lisa

Re: Interne Tabelle als Excel Datei im Hintergrund speichern

Beitrag von PeterPaletti (Specialist / 348 / 32 / 97 ) »
Jo, habe ich jetzt auch bemerkt. Er scheint kein APPEND zu mögen. Nach meiner Ansicht liegt das an

Code: Alles auswählen.

           IF <c>-type->kind = cl_abap_typedescr=>kind_elem.
Für die Felder in den APPENDs klappt das nicht, das müsste man noch eine Verschachtelungsstufe tiefer gehen.

Re: Interne Tabelle als Excel Datei im Hintergrund speichern

Beitrag von PeterPaletti (Specialist / 348 / 32 / 97 ) »
Oder 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.

Folgende Benutzer bedankten sich beim Autor PeterPaletti für den Beitrag:
lisa


Re: Interne Tabelle als Excel Datei im Hintergrund speichern

Beitrag von lisa (ForumUser / 53 / 8 / 1 ) »
PeterPaletti hat geschrieben:
25.03.2022 12:09
Oder 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.

Hallo PeterPaletti,

es hat jetzt geklappt. Alle Felder von vbak sind in der Excel Datei.

Tausend Male Dank!

Viele Grüße
Lisa

Seite 1 von 1

Vergleichbare Themen

31
Antw.
20519
Views
Interne Tabelle als Excel-Datei speichern
von Bright4.5 » 22.08.2018 13:50 • Verfasst in ABAP® für Anfänger
8
Antw.
3810
Views
Interne Tabelle als Datei exportieren (Hintergrund)
von BubbleSort » 19.12.2016 10:18 • Verfasst in ABAP® Core
0
Antw.
2391
Views
Interne Tabelle in Datei speichern
von Schludi » 08.06.2006 10:52 • Verfasst in Java & SAP®
13
Antw.
9675
Views
interne Tabelle als CSV-Datei auf Festplatte speichern.
von Bright4.5 » 09.10.2018 09:23 • Verfasst in ABAP® für Anfänger
8
Antw.
4424
Views
Excel Datei Lesen und in sap Tabelle speichern
von amjahid » 13.11.2007 09:44 • Verfasst in ABAP® für Anfänger

Aktuelle Forenbeiträge

Daten an Tabelle binden
vor einer Stunde von Lukas Sanders 2 / 787
Dialog-Container mit Toolbar/Status
vor 14 Stunden von black_adept gelöst 21 / 2616

Newsletter Anmeldung

Keine Beiträge verpassen! Wöchentlich versenden wir lesenwerte Beiträge aus unserer Community.
Die letzte Ausgabe findest du hier.
Details zum Versandverfahren und zu Ihren Widerrufsmöglichkeiten findest du in unserer Datenschutzerklärung.

Aktuelle Forenbeiträge

Daten an Tabelle binden
vor einer Stunde von Lukas Sanders 2 / 787
Dialog-Container mit Toolbar/Status
vor 14 Stunden von black_adept gelöst 21 / 2616

Unbeantwortete Forenbeiträge

aRFC im OO-Kontext
vor 4 Wochen von ralf.wenzel 1 / 2402
Hilfe bei SWEC/SWE2
September 2024 von retsch 1 / 8986