Langtexte: Zeilenumbruch bei Excel-Import

Getting started ... Alles für einen gelungenen Start.
18 Beiträge Vorherige Seite 2 von 2 (current)
18 Beiträge Vorherige Seite 2 von 2 (current)

Re: Langtexte: Zeilenumbruch bei Excel-Import

Beitrag von xGabriel (ForumUser / 16 / 6 / 0 ) » 13. Nov 2018 09:21

Viiiiiiieeeelen vielen Dank a-dead-trousers, du bist der Hammer!! :up:
Jetzt klappts, hätt ich alleine niemals hingekriegt!

2 Kleinigkeiten hab ich noch in meinem Programm, die für dich als Experte sicher kein Problem darstellen, wäre toll wenn du hier noch ne Lösung für mich hast.

Der Textname von Vertriebstexten im Materialstamm (ID: 0001 , Objekt: MVKE) wird je nach Materialnummer auf 2 Arten gebildet. Im Excel soll man natürlich nur die Materialnummer eingeben und das Programm sollte automatisch den richtigen Namen bilden:

1.) Material hat nur Ziffern: zB: 1801 , VkOrg: 1010 , VtWeg 00 --> Material wird auf 18 Stellen mit führenden Nullen aufgefüllt und mit VkOrg+VtWeg mit 24 Stellen dargestellt --> Textname = 000000000000001801101000
Dies habe ich hinbekommen, doch den 2. Fall bekomme ich nicht ganz hin:

2.) Material beinhaltet Buchstaben oder Sonderzeichen (zB: . , - , _) : zB: 45-0800-01 (hat 10 Stellen) VkOrg: 1010 , VtWeg 00 --> nun wird das Material ganz links gestellt und die 18 Stellen werden mit Leerzeichen aufgefüllt --> Textname ist dann: 45-0800-01 101000 (8 Leerzeichen zwischen Material und Vertriebsbereich, in Summe wieder 24 Stellen)

Somit brauche ich hier ein Coding, welches mir dynamisch die Leerzeichen berechnet. Ich habe mir nun mal die Differenz der Materiallänge berechnet und eine Variable mit dem Wert ' ' angelegt. Doch nun müsste ich es noch irgendwie hinkriegen, dass ich sage --> Differenz = Anzahl an ' ' nach der Materialnummer. Oder bin ich hier komplett auf dem Holzweg und es gibt eine viel einfachere Lösung?

Code: Alles auswählen.


DATA:
    gv_matsize(2)   TYPE c,
    gv_space(18)    TYPE c VALUE ' ',
    gv_diff(2)      TYPE c.

  gv_matsize = strlen( wa-textname ) .
  gv_diff = 18 - gv_matsize.
  gv_matnr2 = wa-textname.

  CONCATENATE      "funktioniert natürlich so nicht, da mir der Befehl für gv_diff = Anzahl an gv_space fehlt
  gv_matnr2
  gv_space
  gv_vertrieb1
  INTO gv_mvke2.


Der Text wird wie gesagt dank dir jetzt im richtigen Format eingefügt, jedoch wird der Text immer in Anführungszeichen gesetzt, sprich vorm ersten Buchstaben des Excel-Text und nach dem letzten erscheint ein " .
Für mein Programm wird die Funktionsgruppe ALSMEX (mit dem FUBA: ALSM_EXCEL_TO_INTERNAL_TABLE) verwendet.

Hier ist im TOP-INCLUDE folgendes deklariert:

Code: Alles auswählen.

CONSTANTS:  gc_esc              VALUE '"'.
Ich vermute es hängt damit zusammen. Weiters gibt es dann 3 Forms, welche die Excel aufbauen bzw. für die Konvertierung verantwortlich sind. Hier muss ich vermutlich irgendwas ändern, doch ich habe keinen Plan was.
Habe probiert jede Zeile wo gc_esc vorkommt (und auch gc_esc selbst) auszusternen, aber dies bringt nicht den gewünschten Erfolg.

Dies wären die 3 Forms:

Code: Alles auswählen.


FORM separated_to_intern_convert TABLES i_tab       TYPE ty_t_sender
                                        i_intern    TYPE ty_t_itab
                                 USING  i_separator TYPE c.
  DATA: l_sic_tabix LIKE sy-tabix,
        l_sic_col   TYPE kcd_ex_col.
  DATA: l_fdpos     LIKE sy-fdpos.

  REFRESH i_intern.

  LOOP AT i_tab.
    l_sic_tabix = sy-tabix.
    l_sic_col = 0.
    WHILE i_tab CA i_separator.
      l_fdpos = sy-fdpos.
      l_sic_col = l_sic_col + 1.
      PERFORM line_to_cell_separat TABLES i_intern
                                   USING  i_tab l_sic_tabix l_sic_col
                                          i_separator l_fdpos.
    ENDWHILE.
    IF i_tab <> space.
      CLEAR i_intern.
      i_intern-row1 = l_sic_tabix.
      i_intern-col1 = l_sic_col + 1.
      i_intern-value = i_tab.
      APPEND i_intern.
    ENDIF.
  ENDLOOP.
ENDFORM.                    " SEPARATED_TO_INTERN_CONVERT
*---------------------------------------------------------------------*
FORM line_to_cell_separat TABLES i_intern    TYPE ty_t_itab
                          USING  i_line
                                 i_row       LIKE sy-tabix
                                 ch_cell_col TYPE kcd_ex_col
                                 i_separator TYPE c
                                 i_fdpos     LIKE sy-fdpos.
  DATA: l_string   TYPE ty_s_senderline.
  DATA  l_sic_int  TYPE i.

  CLEAR i_intern.
  l_sic_int = i_fdpos.
  i_intern-row1 = i_row.
  l_string = i_line.
  i_intern-col1 = ch_cell_col.
* csv Dateien mit separator in Zelle: --> ;"abc;cd";
  IF ( i_separator = ';' OR  i_separator = ',' )
     AND l_string(1) = gc_esc.
      PERFORM line_to_cell_esc_sep USING l_string
                                         l_sic_int
                                         i_separator
                                         i_intern-value.
  ELSE.
    IF l_sic_int > 0.
      i_intern-value = i_line(l_sic_int).
    ENDIF.
  ENDIF.
  IF l_sic_int > 0.
    APPEND i_intern.
  ENDIF.
  l_sic_int = l_sic_int + 1.
  i_line = i_line+l_sic_int.
ENDFORM.

*---------------------------------------------------------------------*
FORM line_to_cell_esc_sep USING i_string
                                i_sic_int      TYPE i
                                i_separator    TYPE c
                                i_intern_value TYPE ty_d_itabvalue.
  DATA: l_int TYPE i,
        l_cell_end(2).
  FIELD-SYMBOLS: <l_cell>.
  l_cell_end = gc_esc.
  l_cell_end+1 = i_separator .

  IF i_string CS gc_esc.
    i_string = i_string+1.
    IF i_string CS l_cell_end.
      l_int = sy-fdpos.
      ASSIGN i_string(l_int) TO <l_cell>.
      i_intern_value = <l_cell>.
      l_int = l_int + 2.
      i_sic_int = l_int.
      i_string = i_string+l_int.
    ELSEIF i_string CS gc_esc.
*     letzte Celle
      l_int = sy-fdpos.
      ASSIGN i_string(l_int) TO <l_cell>.
      i_intern_value = <l_cell>.
      l_int = l_int + 1.
      i_sic_int = l_int.
      i_string = i_string+l_int.
      l_int = strlen( i_string ).
      IF l_int > 0 . MESSAGE x001(kx) . ENDIF.
    ELSE.
      MESSAGE x001(kx) . "was ist mit csv-Format
    ENDIF.
  ENDIF.

ENDFORM.



Re: Langtexte: Zeilenumbruch bei Excel-Import

Beitrag von a-dead-trousers (Top Expert / 3206 / 81 / 794 ) » 13. Nov 2018 13:59

Das mit dem Namen hört sich nach ALPHA-Konvertierung an:
Einfach eine Variable vom selben Typ wie in der Datenbanktabelle anlegen und mit dem Funktionsbaustein CONVERSION_EXIT_ALPHA_INPUT umwandeln lassen.

Das Entfernen der Hochkommas am Anfang oder Ende eines Textes geht auch recht leicht:

Code: Alles auswählen.

REPLACE ALL OCCURRENCES OF REGEX '^"|"$' IN lv_string WITH space.
* Einbauen vor:
SPLIT lv_string AT CL_ABAP_CHAR_UTILITIES=>NEWLINE INTO TABLE lt_string.

Folgende Benutzer bedankten sich beim Autor a-dead-trousers für den Beitrag:
xGabriel

Theory is when you know something, but it doesn't work.
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why.

ECC: 6.07
Basis: 7.40

Re: Langtexte: Zeilenumbruch bei Excel-Import

Beitrag von xGabriel (ForumUser / 16 / 6 / 0 ) » 13. Nov 2018 16:07

Habs hinbekommen! :)

Kann dir echt gar nicht genug danken! Ohne dich wäre mein Programm wahrscheinlich niemals fertig geworden! :D

Vorherige Seite 2 von 2 (current)

Aktuelle Forenbeiträge

ABAP Clean Code
vor 7 Stunden von ralf.wenzel 36 / 790
ADOBE Forms - geschachtelte Tabellen
vor 8 Stunden von a-dead-trousers 3 / 31
Merkmale in Abhängigkeit vom Beziehungswissen
vor 11 Stunden von wreichelt 6 / 167
Abrechnung Konditionskontrakte Wildcards
vor 11 Stunden von ewx 2 / 22
PDF24 - GUI crasht bei PDF Druck
vor 15 Stunden von Lukas R. 3 / 47

Unbeantwortete Forenbeiträge

[GELÖST] Feld KNVV-BOIDT
vor 4 Tagen von SAP_ENTWICKLER 1 / 46
Sortierbegriffe einer Stückliste ändern
vor 4 Tagen von mbiesenb 1 / 39
Feiertagsklasse und Lohnart Verknüpfung entfernen
vor 4 Tagen von Flashtie 1 / 39
Berechtigungen für Batch User
vor einer Woche von JohnLocklay 1 / 85