Tabellenexport als .xlsx anpassen

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

Tabellenexport als .xlsx anpassen

Beitrag von JanR (ForumUser / 63 / 15 / 2 ) »
Hallo zusammen,

Edit: an alle die sich den Beitrag in den letzten 45min angesehen hatte, ich hatte den falschen Code kopiert. Ist nun korrigiert.

Mit folgendem Coding kann ich aus Daten, die ich in einer internen Tabelle habe eine .xlsx Datei generieren. Das klappt eigentlich auch relativ gut, jedoch würde ich gerne ein paar Änderungen an dem Format der Excel-Datei vornehmen und wollte fragen ob irgendjemand weiß wo in diesem Code ich diese Angaben finde und verändern kann.

Coding

Code: Alles auswählen.

* Mit Hilfe der Klasse cl_fdt_xl_spreadsheet können über XML-Transformationen
* Daten aus SAP in XLSX-Dateien geschrieben werden
TRY.
* Testdaten lesen
    SELECT * FROM t001 INTO TABLE @DATA(it_t001).
 
    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 #( it_t001 )
                                                                                         iv_call_type = if_fdt_doc_spreadsheet=>gc_call_dec_table ).
      IF xstrlen( lv_bin_data ) > 0.
        DATA: lv_action TYPE i.
        DATA: lv_filename TYPE string.
        DATA: lv_fullpath TYPE string.
        DATA: lv_path TYPE string.
 
* Save-Dialog
        cl_gui_frontend_services=>file_save_dialog( EXPORTING
                                                      default_file_name = 'Excel.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.
* XSTRING -> SOLIX (RAW)
          DATA(it_raw_data) = cl_bcs_convert=>xstring_to_solix( EXPORTING iv_xstring = lv_bin_data ).
 
* Datei lokal speichern
          cl_gui_frontend_services=>gui_download( EXPORTING
                                                    filename     = lv_fullpath
                                                    filetype     = 'BIN'
                                                    bin_filesize = xstrlen( lv_bin_data )
                                                  CHANGING
                                                    data_tab     = it_raw_data ).
 
 
        ENDIF.
      ENDIF.
    ENDIF.
  CATCH cx_root INTO DATA(e_text).
    MESSAGE e_text->get_text( ) TYPE 'I'.
ENDTRY.
Code ist von https://codezentrale.de/tag/xlsx/

Wenn ich diesen Code ausführe wird eine .xlsx Datei generiert deren Spalten alle die gleiche Länge haben. Hier ist meine Frage, ob jemand die Möglichkeit sieht mitzugeben wie lang die Spalten später in der Datei sein sollen. (Screenshot 2 im Anhang)

Außerdem hat die Datei dann 4 Tabellen-Blätter. Einmal die Tabelle mit meinen Daten (vielleicht gibt es ja auch hier die Möglichkeit diese zu benennen) und dann werden noch die Tabellen-Blätter: Eing.hilfe, Spaltendetails und Spaltenalias-Mapping generiert, kann man irgendwo mitgeben, dass es nur die eine Seite mit den Werten aus meiner Tabelle erstellt? (Screenshot 1 im Anhang)

Danke im Voraus für jede Hilfe und Anregung!
Jan

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


Re: Tabellenexport als .xlsx anpassen

Beitrag von black_adept (Top Expert / 4103 / 128 / 945 ) »
Moin Jan,

wenn du das ändern willst musst du im Coding der Methode CL_FDT_XL_SPREADSHEET->SET_WORKSHEET_COLS eine Modifikation vornehmen ( am Besten beim allerletzten ELSE der Methode, wo aktuell wohl immer auf 40 gesetzt wird ).
Wenn du keine Modifikation machen willst: Am Anfang der Methode via impl. Enhancement in eine eigene Methode verzweigen, wo du de facto das Coding kopierst aber deine Änderung machen kannst und dann via RETURN das normale Coding links liegen lassen. Aber bitte so machen, dass am Anfang entschieden wird, ob der Aufrufer deine Sonderlocke möchte oder doch lieber im erprobten Standard bleiben will.
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Seite 1 von 1

Vergleichbare Themen

6
Antw.
1739
Views
Mailversand mit XLSX
von charlie01 » 20.08.2020 17:27 • Verfasst in ABAP® für Anfänger
10
Antw.
6658
Views
Funktionsbaustein um XLSX-Datei zu speichern
von Bright4.5 » 05.10.2018 16:25 • Verfasst in ABAP® für Anfänger
9
Antw.
9839
Views
Download mit OPEN DATASET -> XLSX Datei korrupt
von Romaniac » 28.09.2017 14:00 • Verfasst in ABAP® Core
1
Antw.
1663
Views
13
Antw.
2841
Views

Über diesen Beitrag



Unterstütze die Community und teile den Beitrag für mehr Leser und Austausch

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.