Formatierung CSV-Datei durch SAP

Die Frage ist als "gelöst" markiert. Den entsprechend Beitrag findest du hier.

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

Formatierung CSV-Datei durch SAP

Beitrag von Julia.hrtm (ForumUser / 13 / 2 / 4 ) »
Hallo,

ich habe eine Transaktion, bei welcher ich über einen Auswahlbutton meine Monatsdaten als CSV per Mail verschicken kann. Das Versenden klappt ohne Probleme. Mein jetziges Problem ist nur noch, dass in die CSV-Datei unnötige Leerschritte geschrieben werden. Da die CSV nach dem Export mit Excel geöffnet wird, fallen diese Leerschritte stark auf.
Hier der Code:

Code: Alles auswählen.

*----------------------------------------------------------------------*
* CREATE CSV FILE
*----------------------------------------------------------------------*
    gv_filename = 'data_payroll.csv'.

    gv_line = 'employee_no;last_name;first_name;labor_prod_time;payed_overtime;time_unit;average_wage;additional_wage;wage_amount;currency'.
    CONCATENATE gv_line cl_abap_char_utilities=>cr_lf INTO gv_line.
    gs_csv = gv_line.
    APPEND gs_csv TO gt_csv.
    LOOP AT gt_out INTO gs_out.
...
      CONCATENATE gs_out-employee_no_clean gs_out-last_name gs_out-first_name gv_labor_prod_time gv_payed_overtime gs_out-unit gv_wage_rate gv_additional_wage gv_wage_amount gs_wage-currency
      INTO gv_line SEPARATED BY ';'.
      CONCATENATE gv_line cl_abap_char_utilities=>cr_lf INTO gv_line.
      gs_csv = gv_line.
      APPEND gs_csv TO gt_csv.
    ENDLOOP.

    OPEN DATASET gv_filename FOR OUTPUT IN TEXT MODE ENCODING UTF-8.
    IF sy-subrc = 0.
      LOOP AT gt_csv INTO gs_csv.
        TRANSFER gs_csv TO gv_filename.
      ENDLOOP.
      CLOSE DATASET gv_filename.
    ENDIF.
    OPEN DATASET gv_filename FOR INPUT IN TEXT MODE ENCODING UTF-8.
    IF sy-subrc = 0.
      DO.
        READ DATASET gv_filename INTO gs_csv.
        IF sy-subrc <> 0.
          EXIT.
        ENDIF.
        APPEND gs_csv TO gt_attachment.
      ENDDO.
      CLOSE DATASET gv_filename.
    ENDIF.
Auf dem Screenshot aus der geöffneten Datei in Excel sieht man, dass am Anfang jeder neuen Zeile massig Leerschritte eingefügt sind.
Screenshot 2025-01-31 071234.png
Da die Datei an weitere Personen per SAP versendet werden soll ist das keine optimale ansicht, da die Felder auf den ersten Blick leer aussehen.
Screenshot 2025-01-31 071627.png

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


Re: Formatierung CSV-Datei durch SAP

Beitrag von Radinator (ForumUser / 34 / 8 / 6 ) »
Guten Morgen,
wenn du die CSV Datei auf deinem Desktop ablegst und mit einem Texteditor, wie Notepad++, öffnest, kommen dann die Leerzeichen vor den Werten daher? Oder ist das ein Problem der Formatierung? Sollte eigentlich nicht sein, da es sich um eine formatlose, Komma/Semikolon getrennetst Textdatei handelt.
Sicherlich auch nicht uninteressant wenn du bei der Ansicht in Notepad++ über Ansicht -> Symbole anzeigen -> Alle Symbole anhakst und schaust ob du Steuerzeichen vor dem ersten Wert siehst.

Lg radinator

Edit:
Ich hab mal versucht den Code soweit nachzubauen, dass auch eine Ausgabe daher kommt

Code: Alles auswählen.

*&---------------------------------------------------------------------*
*& Report ZFPF_TEST041
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
report zfpf_test041.


types:
  wage type c length 5,
  id type c length 4,
  begin of t_empl_data,
    id              type id,
    last_name       type string,
    first_name      type string,
    prod_time       type time,
    payed_overtime  type time,
    unit            type string,
    wage_rate       type wage,
    additional_wage type wage,
    wage_amount     type wage,
    currency        type curcy,
  end of t_empl_data.

data:
  file_name type string,
  csv_line  type string,
  empl_data type table of t_empl_data,
  empl_data_line like line of empl_data,
  csv_out type table of string,
  csv_out_line like line of csv_out.

empl_data = value #(
  ( id = '4711' last_name = 'A'  first_name = '1' prod_time = '080000' payed_overtime = '000300' unit = 'CO' wage_rate = 13 additional_wage = 37 wage_amount = 42 currency = 'EUR' )
  ( id = '4712' last_name = 'B'  first_name = '2' prod_time = '080000' payed_overtime = '000300' unit = 'CO' wage_rate = 13 additional_wage = 37 wage_amount = 42 currency = 'EUR' )
  ( id = '4713' last_name = 'C'  first_name = '3' prod_time = '080000' payed_overtime = '000300' unit = 'CO' wage_rate = 13 additional_wage = 37 wage_amount = 42 currency = 'EUR' )
  ( id = '4714' last_name = 'D'  first_name = '4' prod_time = '080000' payed_overtime = '000300' unit = 'CO' wage_rate = 13 additional_wage = 37 wage_amount = 42 currency = 'EUR' )
  ( id = '4715' last_name = 'E'  first_name = '5' prod_time = '080000' payed_overtime = '000300' unit = 'CO' wage_rate = 13 additional_wage = 37 wage_amount = 42 currency = 'EUR' )
  ( id = '4716' last_name = 'F'  first_name = '6' prod_time = '080000' payed_overtime = '000300' unit = 'CO' wage_rate = 13 additional_wage = 37 wage_amount = 42 currency = 'EUR' )
  ( id = '4717' last_name = 'G'  first_name = '7' prod_time = '080000' payed_overtime = '000300' unit = 'CO' wage_rate = 13 additional_wage = 37 wage_amount = 42 currency = 'EUR' )
  ( id = '4718' last_name = 'H'  first_name = '8' prod_time = '080000' payed_overtime = '000300' unit = 'CO' wage_rate = 13 additional_wage = 37 wage_amount = 42 currency = 'EUR' )
  ( id = '4719' last_name = 'I'  first_name = '9' prod_time = '080000' payed_overtime = '000300' unit = 'CO' wage_rate = 13 additional_wage = 37 wage_amount = 42 currency = 'EUR' )
  ( id = '4720' last_name = 'J'  first_name = '0' prod_time = '080000' payed_overtime = '000300' unit = 'CO' wage_rate = 13 additional_wage = 37 wage_amount = 42 currency = 'EUR' )
).

data:
   dummy type string.

dummy = sy-host.

file_name = '\\XXX\sap\ED0\LO\data_payroll.csv'. " XXX ist in dem Fall der Root-Pfad des SAP Systems
csv_line = 'id;last_name;first_name;prod_time;payed_overtime;unit;wage_rate;additional_wage;wage_amount;currency'.

concatenate csv_line cl_abap_char_utilities=>cr_lf into csv_line.
csv_out_line = csv_line.
append csv_out_line to csv_out.

loop at empl_data into empl_data_line.
  " ...
  concatenate
    empl_data_line-id
    empl_data_line-last_name
    empl_data_line-first_name
    empl_data_line-prod_time
    empl_data_line-payed_overtime
    empl_data_line-unit
    empl_data_line-wage_rate
    empl_data_line-wage_amount
    empl_data_line-currency
  into
    csv_line
  separated by
    ';'.
  concatenate
    csv_line
    cl_abap_char_utilities=>cr_lf
  into
    csv_out_line.
  append csv_out_line to csv_out.
endloop.

open dataset file_name for output in text mode encoding utf-8.
if ( sy-subrc = 0 ).
  loop at csv_out into csv_out_line.
    transfer csv_out_line to file_name.
  endloop.
  close dataset file_name.
endif.
Den Teil, bei dem der Inhalt dem E-Mail Attachment angehängt wird, hab ich mal weg gelassen. Wenn ich die Datei so aufm Server aufmache dann kommen nach jeder Zeile 2 Leerzeilen daher, sonst ist aber alles im Format, wie es sein soll. Dies lässt für mich eine Schlussfolgerung zu: Der Lesen und ins Attachment schreiben Teil wird vermutlich der Grund sein, warum es bei dir nicht funktioniert. Schau doch bitte bei dir aufm System dir die Datei an und prüfe ob die korrekt rauskommt. Wenn ja liegt es vermutlich wirklich an dem Lese-Teil.

Folgende Benutzer bedankten sich beim Autor Radinator für den Beitrag:
Julia.hrtm


Re: Formatierung CSV-Datei durch SAP

Beitrag von Julia.hrtm (ForumUser / 13 / 2 / 4 ) »
Radinator hat geschrieben:
Heute 08:30
Der Lesen und ins Attachment schreiben Teil wird vermutlich der Grund sein, warum es bei dir nicht funktioniert.
Danke für die Antwort. :)
Es war der Grund.
Ich habe meinen Code an dieser Stelle gedebuggt und festgestellt, dass in gs_csv nach jeder Zeile mit Dateninhalt eine leere Zeile ohne Inhalt in gt_attachement geschrieben wird. Da die leeren Zeilen keine Absatz-Kennzeichnung hatten, wurden sie am Ende vor die nächste Zeile geschrieben. Konnte das ganze durch eine IF-Abfrage lösen, bei welcher ich prüfe, dass gs_csv nicht leer ist.

Code: Alles auswählen.

    OPEN DATASET gv_filename FOR INPUT IN TEXT MODE ENCODING UTF-8.
    IF sy-subrc = 0.
      DO.
        READ DATASET gv_filename INTO gs_csv.
        IF sy-subrc <> 0.
          EXIT.
        ENDIF.
        IF gs_csv IS NOT INITIAL.
          APPEND gs_csv TO gt_attachment.
        ENDIF.
      ENDDO.
      CLOSE DATASET gv_filename.
    ENDIF.

Re: Formatierung CSV-Datei durch SAP

Beitrag von Radinator (ForumUser / 34 / 8 / 6 ) »
Wunderbar :) Freut mich, dass da Problem für dich gelöst ist!

Seite 1 von 1

Vergleichbare Themen

3
Antw.
1845
Views
Formatierung Spalteninhalt ALV
von riedelbauch » 21.05.2008 15:04 • Verfasst in ABAP® Core
2
Antw.
1726
Views
Tabellen und Formatierung
von Lord » 09.05.2016 11:18 • Verfasst in ABAP® für Anfänger
8
Antw.
1536
Views
Formatierung bei Itab in CSV
von deejey » 18.07.2023 13:40 • Verfasst in ABAP® Core
3
Antw.
3567
Views
Formatierung von Zahlenfeldern
von Prego » 11.08.2005 09:51 • Verfasst in ABAP® für Anfänger
5
Antw.
4794
Views
SAP Script formatierung
von Ulrich Heinrichs » 26.06.2013 16:09 • Verfasst in ABAP® Core

Über diesen Beitrag



Die Frage ist als "gelöst" markiert. Den entsprechend Beitrag findest du hier.

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

Aktuelle Forenbeiträge

Formatierung CSV-Datei durch SAP
vor einer Stunde von Radinator gelöst 4 / 76
Post-Methode für API´s
vor 3 Stunden von Radinator 2 / 217
DB Abfrage mit Range Table und Wildcard-Einträgen
vor 23 Stunden von rob_abc gelöst 5 / 253

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

Formatierung CSV-Datei durch SAP
vor einer Stunde von Radinator gelöst 4 / 76
Post-Methode für API´s
vor 3 Stunden von Radinator 2 / 217
DB Abfrage mit Range Table und Wildcard-Einträgen
vor 23 Stunden von rob_abc gelöst 5 / 253