Langtexte: Zeilenumbruch bei Excel-Import

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

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 ) »
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.


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


Re: Langtexte: Zeilenumbruch bei Excel-Import

Beitrag von a-dead-trousers (Top Expert / 4271 / 213 / 1140 ) »
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.18
Basis: 7.50

Re: Langtexte: Zeilenumbruch bei Excel-Import

Beitrag von xGabriel (ForumUser / 16 / 6 / 0 ) »
Habs hinbekommen! :)

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

Vergleichbare Themen

7
Antw.
4317
Views
Excel Import aus SAP-Server-Dateien möglich(statt Frontend)?
von eberhard » 21.11.2006 19:03 • Verfasst in ABAP® Core
10
Antw.
18093
Views
Zeilenumbruch ??
von steffi_ma » 13.01.2005 16:19 • Verfasst in ABAP® Core
2
Antw.
2177
Views
Langtexte löschen
von PeterPaletti » 15.07.2014 08:59 • Verfasst in ABAP® für Anfänger
1
Antw.
1849
Views
Zeilenumbruch im ALV-Grid
von Kaiwalker » 17.05.2005 07:58 • Verfasst in ABAP Objects®
4
Antw.
22013
Views
zeilenumbruch im string
von tschleich » 13.05.2004 11:56 • Verfasst in ABAP® für Anfänger

Ü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

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.

Unbeantwortete Forenbeiträge

Zwischensumme Adobe Forms
vor 3 Tagen von Lucyalison 1 / 71
Group Items auf einer Filterbar
vor einer Woche von Bright4.5 1 / 111
tRFC Transaktionen SM58
vor 4 Wochen von A6272 1 / 141