Automatischer Export von SAP-Daten nach Excel

In SAP ERP und SAP S/4HANA ist es möglich, innerhalb der SAP GUI einen automatischen Export von SAP-Daten nach Excel zu ermöglichen. Im Rahmen des ALV Grid Control steht bereits eine manuelle Funktion zur Verfügung, um SAP-Daten nach Excel zu exportieren. In diesem Artikel werde ich ausführlich sowohl die manuelle als auch die automatisierte Exportfunktion beleuchten.

Excel, das weltweit führende Tabellenkalkulationsprogramm, zeigt sich in Kombination mit SAP ERP und SAP S/4HANA als äußerst hilfreich. Insbesondere im Finanzwesen, insbesondere in SAP FI und SAP CO, bleibt es nach wie vor ein stark genutztes Tool, um vielfältige flexible Berechnungen und Auswertungen durchzuführen.

Manueller Export von SAP-Daten nach Excel

Das ALV Grid Control bietet eine Standardfunktion, um die angezeigten Daten nach Excel herunterzuladen. Diese Funktion steht ebenfalls im Data Browser (Transaktion SE16N) zur Verfügung. Sobald die Daten in der Liste angezeigt werden, kann man in der Toolbar den Button „Exportieren“ und im Anschluss die Option „Tabellenkalkulation“ wählen.

Manueller Export von SAP-Daten nach Excel

Daraufhin kann man das Format auswählen. Wenn man immer das gleiche Format für einen Excel-Export verwendet, kann man dabei die Checkbox „Immer das gewählte Format anwenden“ zusätzlich auswählen und die Eingaben mit der Enter-Taste oder dem Bestätigen-Button bestätigen.

Excel-Export - Format für Tabellenkalkulation auswählen

Als Nächstes öffnet sich der Windows-Explorer, indem man das Download-Verzeichnis angeben kann, in das die EXPORT.XLSX Datei gespeichert werden soll. Bei Bedarf kann man den vorgeschlagenen Namen von „EXPORT“ verändern. Wenn man den Download bestätigt hat, öffnet sich ein Fenster zur SAP GUI Sicherheit, das man bestätigen muss, da die SAP GUI auf den lokalen Computer zugreift. Daraufhin werden die exportierten Daten in Excel direkt angezeigt. Man kann bei Bedarf Auswertungen durchführen oder Daten verändern.

Exportierte Daten in Excel

Automatischer Export von SAP-Daten nach Excel

Ein automatischer Export von SAP-Daten nach Excel kann in verschiedenen Lösungsansätzen umgesetzt werden. Die gängigsten Möglichkeiten sind folgende:

  • SAP GUI Scripting
  • ABAP-Programm

SAP GUI Scripting

Man kann den manuellen Datenexport von SAP nach Excel mit SAP GUI Scripting umsetzen. Dabei handelt es sich um eine Automatisierungsschnittstelle, die die Funktionalität des SAP GUI for Windows erweitert. Aus Sicht des SAP-Servers gibt es keinen Unterschied zwischen der SAP GUI-Kommunikation, die von einem Skript erzeugt wird, und der Kommunikation, die von einem Benutzer initiiert wird. Daher hat ein Skript die gleichen Rechte, SAP-Transaktionen auszuführen und Daten einzugeben, wie der Benutzer, der es startet.

Voraussetzungen für SAP GUI Scripting

Damit SAP GUI Scripting verwendet werden kann, müssen folgende Voraussetzungen erfüllt sein:

  • Installation des Scripting Tools in der SAP GUI
  • Aktivierung des SAP GUI Scripting
    • Profilparameter sapgui/user_scripting auf TRUE setzen in der Transaktion RZ11 oder RZ10

Ob das SAP GUI Scripting auf dem aktuellen SAP-Server eingerichtet ist und unterstützt wird kann man in der Systemleiste in den Systeminformationen erkennen. Ist SAP GUI Scripting auf dem SAP-Server deaktiviert, ist das entsprechende Symbol in den Statusinformationen nicht sichtbar und es wird die Information „Skriptunterstützung auf dem Server deaktiviert“ angezeigt, wenn man mit der Maus darüber fährt.

Skriptunterstützung auf dem Server deaktiviert

Ist SAP GUI Scripting jedoch aktiviert, wird das Symbol in den Systeminformationen angezeigt und der Text „SAP GUI Scripting: Skript wird nicht ausgeführt“ angezeigt.

SAP GUI Scripting wird unterstützt

Automatischer Datenexport mit SAP GUI Scripting

Mit SAP GUI Scripting kannst Du den manuellen Datenexport automatisieren. Dafür zeichnest Du ein SAP GUI Skript auf. Zuerst klickst Du auf den Button „Lok. Layout anpassen“ oder verwendest die Tastenkombination „Alt + F12“, wenn Du Dich im SAP-System in der SAP GUI angemeldet hast. Daraufhin wählst Du die Funktion „Skript-Aufzeichnung und -Playback“.

Skript-Aufzeichnung und -Playback

Daraufhin erscheint ein Fenster, in dem man ein SAP GUI Skript aufzeichnen, stoppen oder abspielen kann. Das SAP GUI Skript wird im angegebenen Pfad gespeichert oder ausgeführt. In diesem Fenster kann man in den entsprechenden Eingabefeldern den Pfad anpassen.

SAP GUI Scripting: Aufzeichnen und Playback

Nachdem man im Eingabefeld „Sichern in:“ den gewünschten Pfad und Dateinamen der zu erstellenden VBA-Datei ausgewählt hat, klickt man auf den Button „Skript aufzeichnen“. Nun gilt es zu beachten, dass alle nun folgenden Aktivitäten in der SAP GUI aufgezeichnet und in der VBA-Datei gespeichert werden. Es sollten im Folgenden nur die Aktivitäten durchgeführt werden, die für das Skript und damit dem Datenexport notwendig sind.

Du führst nun die Schritte durch, die Du ebenfalls bei einem manuellen Datenexport nach Excel ausführen wirst. Um bspw. Bestelldaten der Tabelle EKKO in eine Excel-Datei zu exportieren, sind also folgende Schritte notwendig:

  1. Transaktion /nSE16N im Kommandofeld eingeben
    • Empfehlung: Mit dem Präfix /n den Transaktionscode aufrufen, damit das Skript später auch außerhalb des Startbildschirms ausgeführt werden kann
  2. Tabelle EKKO eingeben
  3. Gewünschte Variante auswählen (Optional)
  4. Selektion mit F8-Taste oder Ausführen-Button ausführen
  5. Gewünschtes Layout auswählen (Optional)
  6. Daten nach Excel exportieren
  7. Skript stoppen

Wichtig ist, dass man nach dem SAP-Datenexport nach Excel das SAP GUI Skript stoppt, in dem man im Fenster den Button „Aufzeichnung beenden“ drückt. Erst danach wird die VBA-Datei im angegebenen Pfad erstellt und kann für zukünftige Zwecke genutzt werden.

Das erstellte VBA-Skript kann man nun über die Funktion „Skript abspielen“ in der SAP GUI ausführen, die Datei ausführen, indem doppelt darauf klickt oder man bindet den VBA-Quellcode in eine Excel-Datei ein, um diesen z. B. über einen Button auszuführen.

ABAP-Programm

Anstelle eines SAP GUI Skripts kann man ein eigenes ABAP-Programm für den SAP-Datenexport nach Excel erstellen und in der Transaktion SA38 oder als SAP-Transaktion ausführen. Dabei kann man das ABAP-Programm nach den eigenen Bedürfnissen anpassen. Sollten die SAP-Daten in ein externes System überführt werden, kann man die notwendige Programmierung in einen RFC-Funktionsbaustein implementieren oder einen OData Service nutzen, um die Daten zu überführen.

ABAP-Klasse CL_FDT_XL_SPREADSHEET

Für das folgende Beispielprogramm verwende ich die ABAP-Klasse CL_FDT_XL_SPREADSHEET. Die Daten werden in die Datei Export_PO.xlsx gespeichert.

DATA: lt_ekko     TYPE TABLE OF ekko,
      lt_columns  TYPE if_fdt_doc_spreadsheet=>t_column,
      lv_head     TYPE ekko, " Kopfzeile muss Typ der selektierten Tabelle haben - Tabelle EKKO
      lo_desc     TYPE REF TO cl_abap_structdescr,
      lv_bin_data TYPE xstring,
      lv_action   TYPE i,
      lv_filename TYPE string,
      lv_fullpath TYPE string,
      lv_path     TYPE string,
      lt_raw_data TYPE solix_tab.

TRY.
*---------------------------------------------------------------------*
* Zu selektierende Daten
* Darauf achten genau die Daten zu selektieren, die notwendig sind
*---------------------------------------------------------------------*
    SELECT * FROM ekko INTO TABLE lt_ekko
      WHERE ernam = 'ANDREASG'.

    IF sy-subrc = 0.

      lo_desc = CAST cl_abap_structdescr( cl_abap_structdescr=>describe_by_data( lv_head ) ).

      LOOP AT lo_desc->get_components( ) ASSIGNING FIELD-SYMBOL(<fs_component>).
        IF <fs_component> IS ASSIGNED.
          IF <fs_component>-type->kind = cl_abap_typedescr=>kind_elem.
            APPEND VALUE #( id           = sy-tabix
                            name         = <fs_component>-name
                            display_name = <fs_component>-name
                            is_result    = abap_true
                            type         = <fs_component>-type ) TO lt_columns.
          ENDIF.
        ENDIF.
      ENDLOOP.

*---------------------------------------------------------------------*
* Kopfzeile und interne Tabelle in XML
* XML --> XSTRING
* Keine großen Datenmengen verwenden, da ansonsten Programmabbruch
*---------------------------------------------------------------------*

      lv_bin_data = cl_fdt_xl_spreadsheet=>if_fdt_doc_spreadsheet~create_document( columns      = lt_columns
                                                                                         itab         = REF #( lt_ekko )
                                                                                         iv_call_type = if_fdt_doc_spreadsheet=>gc_call_dec_table ).
      IF xstrlen( lv_bin_data ) > 0.

*---------------------------------------------------------------------*
* Windows-Explorer - Datei speichern
*---------------------------------------------------------------------*
        cl_gui_frontend_services=>file_save_dialog( EXPORTING
                                                      default_file_name = 'Export_PO.xlsx'
                                                      default_extension = 'xlsx'
                                                      file_filter       = |Excel-Datei (*.xlsx)\|*.xlsx\|{ cl_gui_frontend_services=>filetype_all }|
                                                    CHANGING
                                                      filename          = lv_filename
                                                      path              = lv_path
                                                      fullpath          = lv_fullpath
                                                      user_action       = lv_action ).

        IF lv_action EQ cl_gui_frontend_services=>action_ok.
*---------------------------------------------------------------------*
* Konvertierung von  XSTRING zu SOLIX (RAW)
*---------------------------------------------------------------------*
          lt_raw_data = cl_bcs_convert=>xstring_to_solix( EXPORTING iv_xstring = lv_bin_data ).

*---------------------------------------------------------------------*
* Excel-Datei speichern
*---------------------------------------------------------------------*
          cl_gui_frontend_services=>gui_download( EXPORTING
                                                    filename     = lv_fullpath
                                                    filetype     = 'BIN'
                                                    bin_filesize = xstrlen( lv_bin_data )
                                                  CHANGING
                                                    data_tab     = lt_raw_data ).


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

Open Source Tool ABAP2XLSX

Alternativ kannst Du Deine SAP-Daten nach Excel exportieren, indem Du ABAP2XLSX verwendest. Dabei handelt es sich um ein Open Sourche Tool, das Du in der Programmiersprache ABAP verwenden kannst, um einfach und schnell SAP-Daten nach Excel und umgekehrt zu verarbeiten. Hierbei stehen zahlreiche nützliche ABAP-Klassen zur Verfügung, die Dir zahlreiche Aufgaben rund um SAP und Excel übernehmen.

TRY.
    DATA lo_excel        TYPE REF TO zcl_excel.
    DATA lo_xl_converter TYPE REF TO zcl_excel_converter.

    SELECT * FROM ekko INTO TABLE @DATA(lt_ekko)
      WHERE ernam = 'ANDREASG'.

    lo_xl_converter = NEW zcl_excel_converter( ).

    lo_xl_converter->convert( EXPORTING it_table = lt_ekko
                              CHANGING  co_excel = lo_excel ).

    DATA(lo_excel_ws) = lo_excel->get_active_worksheet( ).

    lo_excel_ws->freeze_panes( ip_num_rows = 1 ).

    DATA(lo_excel_writer) = CAST zif_excel_writer( NEW zcl_excel_writer_2007( ) ).
    DATA(lv_excel_data) = lo_excel_writer->write_file( lo_excel ).

    DATA(lt_raw_data) = cl_bcs_convert=>xstring_to_solix( iv_xstring = lv_excel_data ).

    cl_gui_frontend_services=>gui_download( EXPORTING filename     = 'C:\Temp\Export.xlsx'
                                                      filetype     = 'BIN'
                                                      bin_filesize = xstrlen( lv_excel_data )
                                            CHANGING  data_tab     = lt_raw_data ).
  CATCH cx_root INTO DATA(ex_txt).
    WRITE / ex_txt->get_text( ).
ENDTRY.

Über den Autor

Andreas Geiger

Mein Name ist Andreas Geiger und ich bin ein erfahrener Senior SAP Berater. Mit mehr als 10 Jahren Berufserfahrung habe ich mehrere SAP-Projekte erfolgreich abgeschlossen und umfangreiche Kenntnisse in verschiedenen Bereichen wie SAP FI, SAP MM und ABAP erworben. Nun möchte ich mein Wissen mit Dir teilen, um Dir einen Mehrwert zu bieten und Dich bei Deiner täglichen Arbeit mit dem SAP-System zu unterstützen.

Mehr zu ERP UP

ERP UP unterstützen

Wenn Du mit ERP UP zufrieden bist, kannst Du mich gerne unterstützen. Dabei gibt es unzählige Möglichkeiten, wie Du mich einfach und schnell unterstützen kannst. Wie Du genau ERP UP unterstützen kannst, erfährst Du hier. Vielen Dank.

Schreibe einen Kommentar