gelöst Langtexte: Zeilenumbruch bei Excel-Import


Getting started ... Alles für einen gelungenen Start.

Moderatoren: Jan, Steff

gelöst Langtexte: Zeilenumbruch bei Excel-Import

Beitragvon xGabriel » 09.11.2018, 09:29

Hallo Zusammen!

Ich habe die Anforderung eine Massenänderung von Langtexten (Material-Vertriebstexte) bereit zu stellen. LSMW ist hier sehr mühsam, da man hier das Excel Zeile für Zeile aufbereiten müsste, und das bei mehreren 100 Materialien in mehreren Sprachen bei 20+ Zeilen pro Material und Sprache :D

Habe nun eine Vorlage im Netz gefunden welche es ermöglicht den gesamten Text einer Excel-Zelle als Langtext zu Importieren. Dies funktioniert auch bereits, doch habe ich folgendes Problem:

Das Programm ist so gestaltet, dass immer nach 53 Zeichen ein Zeilenumbruch gemacht wird, damit man im Langtext nicht nach rechts scrollen muss.
Dies ist grundsätzlich auch gut, doch in der Praxis sind bei einem schön aufbereitetem Vertriebstext nicht immer nach 53 Zeichen die Zeilenumbrüche.

zB: ein Text wie er im Excel (in einer Zelle) aufscheint.

Maschine XY

Es handelt sich um ein tolles Produkt.
Sehr gute Handhabung mit spezieller Technik.

Ausstattung:
Motor: XY
.....

Das System zählt hier die Leerzeichen auch als Zeichen mit und somit verschiebt sich der Text, es ergeben sich Zeilenumbrüche wo zB. nur 1 Buchstabe in einer Zeile steht und der Text ist somit unbrauchbar.

Hier das betroffene Coding:

Code: Alles auswählen
 TYPES: BEGIN OF ty_itab ,
         textname(70) TYPE c,
         spras(2)     TYPE c,
         lmaktx(2112) TYPE c,
         row          TYPE i,
         tsize        TYPE i,
       END OF ty_itab.

*  Data Declarations - Internal Tables
DATA: i_tab     TYPE STANDARD TABLE OF ty_itab  INITIAL SIZE 0,
      wa        TYPE ty_itab,
      it_exload LIKE zalsmex_tabline  OCCURS 0 WITH HEADER LINE.
DATA: it_lines       LIKE STANDARD TABLE OF tline WITH HEADER LINE,
      it_text_header LIKE STANDARD TABLE OF thead WITH HEADER LINE,
      p_error        TYPE  sy-lisel,
      len            TYPE i.


 DATA:
         off TYPE i VALUE '1'.


  LOOP AT i_tab INTO wa.

"anderes Coding...

    MOVE wa-tsize TO len .

    len =  len / 53  + 1.

    DO len TIMES .
      MOVE '*' TO it_lines-tdformat.
      MOVE  wa-lmaktx+off(53) TO it_lines-tdline.
      SHIFT it_lines-tdline LEFT DELETING LEADING ' '.

      off = off + 53 .
      APPEND it_lines.
      CLEAR it_lines .
    ENDDO.

*anschließend werden die Texte noch mit dem FUBA: "SAVE_TEXT" gespeichert
 



Wenn ich mir das Ganze im Debugger ansehe werden die Zeilenumbrüche aus Excel auch an den richtigen Stelle durch # dargestellt, doch durch dieses Coding wird einfach stur nach 53 Zeichen eine neue Zeile begonnen (unabhängig von den Umbrüchen im Excel)

Ich bräuchte hier einen Vorschlag, wie ich dieses Coding entsprechend anpassen kann, damit nach jedem Excel-Zeilenumbruch auch im Langtext einer gemacht wird. Sprich Umbruch immer nach dem Zeichen #.
Ein Problem hierbei wird ws. auch "len" darstellen, weil hier die Anzahl der Zeilen fix über Anzahl Zeichen gesamt / 53 Zeichen pro Zeile berechnet wird...

Über entsprechende Lösungsvorschläge wäre ich seeeeeeehr dankbar! :) :up:


Mit freundlichen Grüßen
Gabriel
xGabriel
ForumUser
 
Beiträge: 16
Registriert: 12.07.2018, 07:28
Dank erhalten: 0 mal
Ich bin: sonstiges

Sponsor

Alte ABAP-Entwicklerweisheit: Weißt du weder aus noch ein, baust du einen BADI ein

Re: Langtexte: Zeilenumbruch bei Excel-Import

Beitragvon a-dead-trousers » 09.11.2018, 12:13

hi.

Du könntest in das Coding und den Text im Excel die zweistellige TDFORMAT-Spalte mitaufnehmen die in deinem Coding momentan hart mit '*' vorbelegt wird. Damit lassen sich dann auch längere Texte abbilden:
'* ' wäre ein neuer Absatz mit dem Standard-Absatzformat
'= ' wäre ein fortsetzen der vorherigen Zeile OHNE Leerzeichen. Also aus 'hier' und 'geht's weiter' wird 'hiergeht's weiter'
' ' wäre ein fortsetzen der vorherigen Zeile MIT Leerzeichen. Also aus 'hier' und 'geht's weiter' wird 'hier geht's weiter'
'/ ' wäre ein Zeilenumbruch (SHIFT+ENTER aus Word bzw. <br> in HTML)

Umgelegt auf deine 53 Zeichen und die Längenangabe, wären dann die ersten zwei Zeichen das TDFORMAT und die restlichen 51 das TDLINE. Natürlich kannst du das auch verlängern, wenn du möchtest. Im SAPscript haben sich meist 72 Zeichen als Zeilenlänge für TDLINE etabliert. Maximal hat TDLINE eine Länge von 132 Zeichen.

lg ADT
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

Für diese Nachricht hat a-dead-trousers einen Dank bekommen :
xGabriel
a-dead-trousers
Top Expert
 
Beiträge: 3090
Registriert: 07.02.2011, 13:40
Dank erhalten: 762 mal
Ich bin: Entwickler/in

Re: Langtexte: Zeilenumbruch bei Excel-Import

Beitragvon a-dead-trousers » 09.11.2018, 12:25

Alternativ fiele mir noch eine Übergabe des Textes als XML bzw. JSON ein. Hier hast du dann nicht mehr das Problem mit der fixen Zeilenlänge.
Wie das ganze funktioniert kannst du dir in der Hilfe zum Befehl CALL TRANSFORMATION ID ansschauen. In der Excel-Spalte musst du dann nur den Text im asXML-Format der SAP eintragen und beim Import die Transformation dazu aufrufen.
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

Für diese Nachricht hat a-dead-trousers einen Dank bekommen :
xGabriel
a-dead-trousers
Top Expert
 
Beiträge: 3090
Registriert: 07.02.2011, 13:40
Dank erhalten: 762 mal
Ich bin: Entwickler/in

Re: Langtexte: Zeilenumbruch bei Excel-Import

Beitragvon wreichelt » 09.11.2018, 12:33

Hallo,

ich habe ganz lange Zeilen geliefert bekommen und konnte die mit dem FB wunderbar aufteilen.

refresh: export_lines.
clear: export_lines.
CALL FUNCTION 'G_SPLIT_LINE'
EXPORTING
INPUT_LINE = zeilen-lline
* CONDENSE_SHORT_LINES = ' '
* IMPORTING
* SPLIT_NOT_SUCCESSFUL =
TABLES
EXPORT_LINES = EXPORT_LINES
EXCEPTIONS
OTHERS = 1. .
* BREAK-POINT.
* jetzt aufgetrennte zeilen in Tabelle für Save_text abspeichern
loop at export_lines.
….

Gruß Wolfgang
wreichelt
Expert
 
Beiträge: 648
Registriert: 17.07.2005, 09:46
Wohnort: Hessen
Dank erhalten: 108 mal
Ich bin: sonstiges

Re: Langtexte: Zeilenumbruch bei Excel-Import

Beitragvon xGabriel » 12.11.2018, 09:42

Hallo,

erstmal danke für eure Antworten.
Aber ich glaube damit komme ich nicht an mein gewünschtes Ziel, da ich eben mit den 132 Zeichen pro Zeile auch nicht auskomme...

Also meine Excel hat derzeit 3 Spalten (Textname, Sprache und Text). In der Spalte Text steht der gesamte Text in EINER ZELLE. In dieser Zelle ist der Text durch Excel-Zeilenumbrüche (ALT+ENTER) formatiert. Diese Umbrüche sind bei jedem Text individuell gestaltet (manchmal nach einigen Worten, manchmal auch nach ein paar Sätzen) . Die Anzahl der Zeichen ist auch immer unterschiedlich, können auch mal relativ viele Zeichen sein (500+).
In der 2. Excel-Zeile folgt bereits das nächste Material usw....

Somit führt ein Zeilenumbruch nach einer vorgegebenen Anzahl an Zeichen (wie es der FUBA: G_SPLIT_LINE macht) nicht zum Ziel.


In meinem Coding wird es ja derzeit bereits so gemacht, dass die Anzahl der Zeilen für jeden Text aufgrund der Gesamtanzahl der Zeichen berechnet werden. Diese erfolgt jedoch immer starr mit der Anzahl an Zeichen pro Zeile (len / 53 + 1)

Gibt es hier keine einfachere Lösung, dass ich sagen kann:
- Finde die Anzahl an '#' in meinem Text heraus und berechne daraus die Anzahl der Zeilen und mache dementsprechend die Zeilenumbrüche nach jedem # ? ( len = len / Anzahl an # +1)

Weil wie gesagt werden mir im Debugger die Zeilenumbrüche an den korrekten Stellen als # angezeigt:

"DSB Ultra HM##Höchste Präszision bei Dünnschnittsägen und speziell#geeignet für alle MASCHINEN.#Mit der folgenden Konfiguration:#Breite: 80cm#Länge: 120cm#Höhe: 400cm#
xGabriel
ForumUser
 
Beiträge: 16
Registriert: 12.07.2018, 07:28
Dank erhalten: 0 mal
Ich bin: sonstiges

Re: Langtexte: Zeilenumbruch bei Excel-Import

Beitragvon a-dead-trousers » 12.11.2018, 10:38

Achso:
Code: Alles auswählen
SPLIT lv_string AT CL_ABAP_CHAR_UTILITIES=>NEWLINE INTO TABLE lt_string.

Damit krigst du die "Absätze" raus und dann machst du mit dem G_SPLIT_LINE die Autrennung auf die Zeilen in deiner TLINE-Tabelle.
Die erste kriegt dabei '*' als TDFORMAT und alle weiteren bleiben leer.
Code: Alles auswählen
LOOP AT lt_string ASSIGNING <ld_string>.

CALL FUNCTION 'G_SPLIT_LINE'
  EXPORTING
    INPUT_LINE = <ld_string>
*    CONDENSE_SHORT_LINES = ' '
*  IMPORTING
*    SPLIT_NOT_SUCCESSFUL =
  TABLES
    EXPORT_LINES = EXPORT_LINES
  EXCEPTIONS
    OTHERS = 1.

ls_tline-tdformat = '*'.
LOOP AT EXPORT_LINES assigning <export_line>.
  ls_tline-tdline = <export_line>.
  append ls_tline to lt_tline.
  clear ls_tline-tdformat.
ENDLOOP.

ENDLOOP.

P.S.: Die '#' im Debugger sind nur Platzhalter für nicht-darstellbare Zeichen.

EDIT:
Ok, das CL_ABAP_CHAR_UTILITIES=>NEWLINE im Code oben dürfte falsch sein. Du müsstest zuerst im Debugger herausfinden welches HEX-Zeichen sich hinter dem '#' bzw. ALT+ENTER aus Excel im String verbirgt und dann dieses Zeichen für die Auftrennung verwenden.
Zuletzt geändert von a-dead-trousers am 12.11.2018, 10:57, insgesamt 1-mal geändert.
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

Für diese Nachricht hat a-dead-trousers einen Dank bekommen :
xGabriel
a-dead-trousers
Top Expert
 
Beiträge: 3090
Registriert: 07.02.2011, 13:40
Dank erhalten: 762 mal
Ich bin: Entwickler/in

Re: Langtexte: Zeilenumbruch bei Excel-Import

Beitragvon wreichelt » 12.11.2018, 10:50

Hallo,

geht das nicht mittels einer While-Schleife ?

WHILE Feld NE abruchbedingung.
if Feld(1) eq '#'.
write ausgabezeile to xyz.
clear ausgabezeile.
else.
WRITE feld(1) to ausgabezeile.
endif.

SHIFT Feld.
ENDWHILE.

Ohne system erstellt,bestimmt gibt's bessere Lösungen dazu.
Gruß Wolfgang
wreichelt
Expert
 
Beiträge: 648
Registriert: 17.07.2005, 09:46
Wohnort: Hessen
Dank erhalten: 108 mal
Ich bin: sonstiges

Re: Langtexte: Zeilenumbruch bei Excel-Import

Beitragvon a-dead-trousers » 12.11.2018, 11:01

wreichelt hat geschrieben:Hallo,

geht das nicht mittels einer While-Schleife ?

...

Ohne system erstellt,bestimmt gibt's bessere Lösungen dazu.
Gruß Wolfgang

Nicht ganz. Damit können die Absatz-Probleme im Sapscript nicht gelöst werden. Auch mit den Trennzeichen kann ein Absatz trotzdem die 132 Zeichen einer Sapscript Textzeile übersteigen.
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
a-dead-trousers
Top Expert
 
Beiträge: 3090
Registriert: 07.02.2011, 13:40
Dank erhalten: 762 mal
Ich bin: Entwickler/in

Re: Langtexte: Zeilenumbruch bei Excel-Import

Beitragvon wreichelt » 12.11.2018, 11:08

[quote="a-dead-trousers"]Nicht ganz. Damit können die Absatz-Probleme im Sapscript nicht gelöst werden. Auch mit den Trennzeichen kann ein Absatz trotzdem die 132 Zeichen einer Sapscript Textzeile übersteigen.

Hallo,
data: strl TYPE i VALUE 0
WHILE Feld NE abruchbedingung.
if Feld(1) eq '#'.
write ausgabezeile to xyz.
clear ausgabezeile.
clear strl.
else.
WRITE feld(1) to ausgabezeile.
strl = strl + 1.
endif.
if strl = 132.
write ausgabezeile to xyz.
clear: ausgabezeile, strl.
endif.
SHIFT Feld.
ENDWHILE.

jetzt mit Abfrage auf 132 Zeichen in der Zeile.
Gruß Wolfgang
wreichelt
Expert
 
Beiträge: 648
Registriert: 17.07.2005, 09:46
Wohnort: Hessen
Dank erhalten: 108 mal
Ich bin: sonstiges

Re: Langtexte: Zeilenumbruch bei Excel-Import

Beitragvon a-dead-trousers » 12.11.2018, 11:16

Das "zerreißt" dir aber unter Umständen die Wörter.
Du müsstest eigentlich nach Leerzeichen trennen und dann für jedes Wort prüfen, ob es noch in die aktuelle Zeile passt.
Genau das macht der G_SPLIT_LINE (halt mit fixen 71 Zeichen aber das ist in diesem Fall sogar eher wünschenswert)
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
a-dead-trousers
Top Expert
 
Beiträge: 3090
Registriert: 07.02.2011, 13:40
Dank erhalten: 762 mal
Ich bin: Entwickler/in

Re: Langtexte: Zeilenumbruch bei Excel-Import

Beitragvon wreichelt » 12.11.2018, 12:00

Hallo,

der FB: CONV_TEXTSTRING_TO_ITF kann wohl 132 Zeichen.
Beispiel: dazu

https://archive.sap.com/discussions/thread/3838804

Gruß Wolfgang
wreichelt
Expert
 
Beiträge: 648
Registriert: 17.07.2005, 09:46
Wohnort: Hessen
Dank erhalten: 108 mal
Ich bin: sonstiges

Re: Langtexte: Zeilenumbruch bei Excel-Import

Beitragvon xGabriel » 12.11.2018, 12:11

a-dead-trousers hat geschrieben:Achso:
Code: Alles auswählen
SPLIT lv_string AT CL_ABAP_CHAR_UTILITIES=>NEWLINE INTO TABLE lt_string.

Damit krigst du die "Absätze" raus und dann machst du mit dem G_SPLIT_LINE die Autrennung auf die Zeilen in deiner TLINE-Tabelle.
Die erste kriegt dabei '*' als TDFORMAT und alle weiteren bleiben leer.
Code: Alles auswählen
LOOP AT lt_string ASSIGNING <ld_string>.

CALL FUNCTION 'G_SPLIT_LINE'
  EXPORTING
    INPUT_LINE = <ld_string>
*    CONDENSE_SHORT_LINES = ' '
*  IMPORTING
*    SPLIT_NOT_SUCCESSFUL =
  TABLES
    EXPORT_LINES = EXPORT_LINES
  EXCEPTIONS
    OTHERS = 1.

ls_tline-tdformat = '*'.
LOOP AT EXPORT_LINES assigning <export_line>.
  ls_tline-tdline = <export_line>.
  append ls_tline to lt_tline.
  clear ls_tline-tdformat.
ENDLOOP.

ENDLOOP.

P.S.: Die '#' im Debugger sind nur Platzhalter für nicht-darstellbare Zeichen.

EDIT:
Ok, das CL_ABAP_CHAR_UTILITIES=>NEWLINE im Code oben dürfte falsch sein. Du müsstest zuerst im Debugger herausfinden welches HEX-Zeichen sich hinter dem '#' bzw. ALT+ENTER aus Excel im String verbirgt und dann dieses Zeichen für die Auftrennung verwenden.




Vielen Dank für deine Bemühungen!
Ich bin leider noch blutiger Anfänger und tue mir etwas schwer deinen Lösungsvorschlag umzusetzen. :cry:


Wäre super wenn du mir nochmal weiterhelfen könntest:

Code: Alles auswählen

*meine Datendeklarationen:

TYPES: BEGIN OF ty_itab ,
         textname(70) TYPE c,
         spras(2)     TYPE c,
         lmaktx(2112) TYPE c,
         row          TYPE i,
         tsize        TYPE i,
       END OF ty_itab.

*  Data Declarations - Internal Tables
DATA: i_tab     TYPE STANDARD TABLE OF ty_itab  INITIAL SIZE 0,
      wa        TYPE ty_itab,
      it_exload LIKE zalsmex_tabline  OCCURS 0 WITH HEADER LINE.
DATA: it_lines       LIKE STANDARD TABLE OF tline WITH HEADER LINE,
      it_text_header LIKE STANDARD TABLE OF thead WITH HEADER LINE,
      p_error        TYPE  sy-lisel,
      len            TYPE i.


  LOOP AT i_tab INTO wa.

*    * Create Header
    it_text_header-tdid     = tdid.
    it_text_header-tdspras  = wa-spras .

    IF tdobject EQ 'MVKE'.
      PERFORM mvke.
    ELSEIF tdobject EQ 'KNVV'.
      PERFORM knvv.
    ELSEIF tdobject EQ 'KNA1'.
      PERFORM kna1.
    ELSE.
      it_text_header-tdname   = wa-textname.
    ENDIF.
    it_text_header-tdobject = tdobject.



  FIELD-SYMBOLS:
    <ld_string>   LIKE LINE OF it_lines,
    <export_line> LIKE LINE OF it_lines.


  SPLIT wa-lmaktx AT cl_abap_char_utilities=>newline INTO TABLE it_lines.


    LOOP AT it_lines ASSIGNING <ld_string>.

      CALL FUNCTION 'G_SPLIT_LINE'
        EXPORTING
          input_line   = <ld_string>
        TABLES
          export_lines = it_lines.
*

      it_lines-tdformat = '*'.
      LOOP AT it_lines ASSIGNING <export_line>.
        APPEND it_lines.
        CLEAR it_lines.
      ENDLOOP.

      AT END OF row.
        CALL FUNCTION 'SAVE_TEXT'
          EXPORTING
            client          = sy-mandt
            header          = it_text_header
            insert          = ' '
            savemode_direct = 'X'
          TABLES
            lines           = it_lines
          EXCEPTIONS
            id              = 1
            language        = 2
            name            = 3
            object          = 4
            OTHERS          = 5.
* Check the Return Code
        IF sy-subrc <> 0.
          MESSAGE ID sy-msgid TYPE sy-msgty
              NUMBER sy-msgno
                WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4 INTO p_error.
          EXIT.
        ENDIF.
        CLEAR: wa.
        REFRESH it_lines .
      ENDAT.
    ENDLOOP.


 



1.) müsste ich hier nicht meine Tabelle i_tab verwenden? Aber wenn ich i_tab verwende bekomme ich den Fehler:
Beim Zusatz "INTO TABLE" sind nur Tabellen mit zeichenartigem Zeilentyp erlaubt (Datentyp C,N,D,T oder STRING).


SPLIT wa-lmaktx AT cl_abap_char_utilities=>newline INTO TABLE it_lines.

2.) Wie finde ich das HEX-Zeichen für # heraus? im Debugger sind selbst wenn ich in meinem Text nur 1 Buchstabe und einen Zeilenumbruch mache im Feld "Inhalt hexadezimal" eeeeextrem viele Buchstaben und Zahlen. Der Wert für ein Zeichen sollte ja sowas ähnliches wie 0D00 sein oder?

3.) Wie deklariere ich die beiden Variablen <ld_string> und <export_lines> richtig?

4.) Beim SAVE_TEXT erkennt er plötzlich AT END AT row nicht mehr und sagt mir, dass die Komponente row nicht existiert. In meinem ursprünglichen Coding hat dies jedoch problemlos funktioniert.



DANKE!
xGabriel
ForumUser
 
Beiträge: 16
Registriert: 12.07.2018, 07:28
Dank erhalten: 0 mal
Ich bin: sonstiges

Re: Langtexte: Zeilenumbruch bei Excel-Import

Beitragvon a-dead-trousers » 12.11.2018, 15:44

ad 1 und 3.)
Code: Alles auswählen
data:
  ls_lines type tline,
  it_string type standard table of string with default key,
  export_lines type standard table of text72 with default key.

FIELD-SYMBOLS:
  <ld_string>   LIKE LINE OF it_lines,
  <export_line> LIKE LINE OF export_lines.

Code: Alles auswählen
SPLIT wa-lmaktx AT cl_abap_char_utilities=>newline INTO TABLE it_string.

LOOP AT it_string ASSIGNING <ld_string>.

  CALL FUNCTION 'G_SPLIT_LINE'
    EXPORTING
      input_line   = <ld_string>
    TABLES
      export_lines = export_lines.

  ls_lines-tdformat = '*'.
  LOOP AT it_lines ASSIGNING <export_line>.
    ls_lines-tdline = <export_line>.
    APPEND ls_lines to it_lines.
    CLEAR ls_lines.
  ENDLOOP.
ENDLOOP.

ad 2)
Wie gesagt geht das am Besten im Debugger. Ich würde als Variablennamen dann z.B. "wa-lmaktx+20" um das 20te Zeichen zu lesen. Dann taste ich mich im Index immer weiter vor bis ich das # Zeichen in der Textdarstellung erreicht habe und in der HEX-Darstellung hat man dann das HEX-Zeichen dazu.

ad 4)
Deine Verschachtelung passt nicht. Vor dem AT END OF ROW muss das ENDLOOP von LOOP AT it_lines rein.

lg ADT
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

Für diese Nachricht hat a-dead-trousers einen Dank bekommen :
xGabriel
a-dead-trousers
Top Expert
 
Beiträge: 3090
Registriert: 07.02.2011, 13:40
Dank erhalten: 762 mal
Ich bin: Entwickler/in

Re: Langtexte: Zeilenumbruch bei Excel-Import

Beitragvon xGabriel » 12.11.2018, 17:21

Wir kommen der Sache schön langsam näher, doch irgendwo ist noch ein Fehler versteckt.

Du hast ja die FIELD-SYMBOLS wie folgt deklariert:
Code: Alles auswählen
  FIELD-SYMBOLS:
    <ld_string>   LIKE LINE OF it_lines,
    <export_line> LIKE LINE OF export_lines.
 


Wenn ich das so mache, bekomme ich bei den beiden LOOPS einen Fehler:

Der Zeilentyp der Tabelle "IT_STRING" ist nicht kompatibel zum Typ des Feldsymbols "<LD_STRING>".
Der Zeilentyp der Tabelle "IT_LINES" ist nicht kompatibel zum Typ des Feldsymbols "<EXPORT_LINE>".

Code: Alles auswählen
LOOP AT it_string ASSIGNING <ld_string>.
LOOP AT it_lines ASSIGNING <export_line>.
 



Habe nun probiert die Deklarationen wie folgt zu ändern:
Den Rest deines Codings habe ich unverändert gelassen:


Code: Alles auswählen
  FIELD-SYMBOLS:
    <ld_string>   LIKE LINE OF it_string,
    <export_line> LIKE LINE OF it_lines.
 


Weiß zwar nicht ob das so richtig ist, aber ich bekomme zumindest keinen Syntaxfehler mehr.

Wenn ich mir das Ganze im Debugger nun ansehe stellt sich ein erster Teilerfolg dadurch ein: Der Text wird jetzt schon mal korrekt in it_string geschrieben. In dieser Tabelle wird nun nach jedem ALT+ENTER im Excel eine neue Zeile begonnen.

Doch dann läuft noch etwas schief (vermutlich durch meine Änderungen an den Deklarationen?):

- in der Tabelle Export_lines befindet sich nur die letzte Textzeile aus it_string
- in ls_lines wird nur das tdformat übergeben, jedoch keine tdline
- dadurch wird natürlich auch nichts an it_lines übergeben (welche im SAVE_TEXT als "lines TABLE" deklariert ist) --> es kommt kein Text an!


CL_ABAP_CHAR_UTILITIES=>NEWLINE wird im Debugger als # mit dem HEX-Wert 0A00 erkannt. Also müsste das eg passen oder?


Vielen Dank nochmal für deine Hilfe und deine Geduld!
xGabriel
ForumUser
 
Beiträge: 16
Registriert: 12.07.2018, 07:28
Dank erhalten: 0 mal
Ich bin: sonstiges

Re: Langtexte: Zeilenumbruch bei Excel-Import

Beitragvon a-dead-trousers » 12.11.2018, 19:25

Flüchtigkeitsfehler.

Code: Alles auswählen
FIELD-SYMBOLS:
  <ld_string>   LIKE LINE OF it_string,
  <export_line> LIKE LINE OF export_lines.

Das wäre die korrekte Datendeklaration gewesen und der zweite Loop müsste sich natürlich auch um die korrekten Daten kümmern. :oops:

Code: Alles auswählen
ls_lines-tdformat = '*'.
LOOP AT export_lines ASSIGNING <export_line>.
  ls_lines-tdline = <export_line>.
  APPEND ls_lines to it_lines.
  CLEAR ls_lines.
ENDLOOP.
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

Für diese Nachricht hat a-dead-trousers einen Dank bekommen :
xGabriel
a-dead-trousers
Top Expert
 
Beiträge: 3090
Registriert: 07.02.2011, 13:40
Dank erhalten: 762 mal
Ich bin: Entwickler/in

Nächste

Zurück zu ABAP® für Anfänger

  Aktuelle Beiträge   
s4hana-cloud
vor 8 Stunden von sap_inchen 1 Antw.
500 Internal Server Error
vor 16 Stunden von zzcpak 1 Antw.
Dokumentinformationen lesen vom DVS
vor 18 Stunden von Tron 4 Antw.
Tabs innerhalb von Tabs
vor 19 Stunden von ewx 4 Antw.
Fakturierungsplan in Kontrakten ändern
vor 15 Stunden von DeathAndPain 1 Antw.

  Ähnliche Beiträge beta
Langtexte lesen
25.10.2004, 16:18 von Hermann 1 Antw.
LSMW Langtexte
08.08.2007, 11:53 von tjanosch 0 Antw.
Langtexte einfügen
03.07.2008, 10:04 von errorist 2 Antw.
Langtexte zu Rollen
15.04.2011, 08:18 von a-dead-trousers 13 Antw.
gelöst Langtexte löschen
15.07.2014, 14:51 von PeterPaletti 2 Antw.

 

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder