none
Word Text mit Zeilenumbruch ersetzen RRS feed

  • Frage

  • Hallo Forum,

    über die Find Methode in Word kann ich Text finden und ersetzen.

    Das geht alles gut, aber wenn der Text aus einem Textfeld mit mehreren Zeilen besteht, wird der Text zwar nach Word übertragen, aber der Zeilenumbruch geht verloren.

    zB im Textfeld

    12345

    67890

    1111

    zu suchender Text in Word wird dann ersetzt mit "12345678901111" am Stück.

    Was mus ich machen, das auch der Zeilenumbruch in Word erfolgt wie in meinem Eingabefeld in der Maske.

    Kann mir da jemand helfen ?  Danke.


    Gruß Roland

    Donnerstag, 27. Februar 2014 12:09

Antworten

  • Hallo Roland,

    den Code verstehe ich ehrlich gesagt nicht.

    Du gibst den Ersetzungstext nicht an und übergibst wdReplaceNone (keine Ersetzung vornehmen) als Ersetzungsparameter. Wie soll da überhaupt was ersetzt werden?

    Probier aber dennoch bitte mal \\r bzw. \\n bzw. \\r\\n. Ggfs. ersetzt C# die Angaben gleich durch einen Zeilenumbruch, da C# \r und \n selbst als Zeichenliterale erkennt, siehe u.a.:

      http://www.dotnetperls.com/newline


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community


    Mittwoch, 5. März 2014 19:36
    Moderator

Alle Antworten

  • Hallo Roland,

    ersetz mal die Zeilenumbrüche in deinem Zieltext durch "\r\n" bzw. nur "\r" oder "\n".


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community

    Freitag, 28. Februar 2014 21:58
    Moderator
  • Hallo Stefan,

    das hatte ich schon versucht.

    Es sind einzelne Textfelder die ich zu einem Text zusammenstelle.

    string Text = TextA +"\r";

    Text += TextB + "\r";

    ...

    Aber das Ergebnis ist immer das Gleiche, es wird kein Umbruch gemacht.

    Den Text in Word ersetze ich überigens mit der Funktion Finde.

     WordApp.Selection.GoTo(ref missing, ref missing, ref missing, ref missing);
                FindText = "[[SuchText]]";
                Replace = Word.WdReplace.wdReplaceNone;
                WordApp.Selection.Find.Execute(ref FindText, ref missing, ref missing,
                    ref missing, ref missing, ref missing, ref missing,
                    ref missing, ref missing, ref missing, ref Replace, ref missing,
                    ref missing, ref missing, ref missing);


    Gruß Roland

    Dienstag, 4. März 2014 06:32
  • Hallo Forum,

    hat keine eine Idee.

    Egal was ich finde und versuche, ich bekommen einfach keinen Zeilenumbruch.


    Gruß Roland

    Mittwoch, 5. März 2014 17:54
  • Hallo Roland,

    den Code verstehe ich ehrlich gesagt nicht.

    Du gibst den Ersetzungstext nicht an und übergibst wdReplaceNone (keine Ersetzung vornehmen) als Ersetzungsparameter. Wie soll da überhaupt was ersetzt werden?

    Probier aber dennoch bitte mal \\r bzw. \\n bzw. \\r\\n. Ggfs. ersetzt C# die Angaben gleich durch einen Zeilenumbruch, da C# \r und \n selbst als Zeichenliterale erkennt, siehe u.a.:

      http://www.dotnetperls.com/newline


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community


    Mittwoch, 5. März 2014 19:36
    Moderator
  • Hallo Stefan,

    Du hast natürlich recht. Anbei etwas mehr Kode.

    // Text ersetzen
                string TextNeu = "TEST TEXT \r\nNeue Zeile\\r\\nNOCH EINE";
               
    
                foreach (Word.Range tmpRange in aDoc.StoryRanges)
                {                
                    tmpRange.Find.Text = "[[Vorname]]";
                    tmpRange.Find.Replacement.Text = TextNeu;
                    
                    tmpRange.Find.Wrap = Word.WdFindWrap.wdFindContinue;
    
                    object replaceAll = Word.WdReplace.wdReplaceAll;
                    
                    tmpRange.Find.Execute(ref missing, ref missing, ref missing,
                        ref missing, ref missing, ref missing, ref missing,
                        ref missing, ref missing, ref missing, ref replaceAll,
                        ref missing, ref missing, ref missing, ref missing);
                }

    Ich habe damit dem\\r und \\n so nochmal getestet.

    Im "normalen" Text funktioniert der Umbruch. Steht der Text aber in einem Tabellenfeld funktioniert der Zeilenumbruch nicht. Für das \\r  stehen dort dann 3 Leerzeichen.

    Hast Du dafür eine Erklärung ? Wo liegt der Unterschied zwischen einem Text im Dokument und einem Text in einem Tabellenfeld ?


    Gruß Roland

    Donnerstag, 6. März 2014 08:56
  • Hallo Stefan,

    Es geht. Danke für die Hilfe. Problem war der Zeichensatz ( France ) warum auch immer in DE geht es jetzt wie es soll.

    Danke für die Hilfe.


    Gruß Roland

    Montag, 10. März 2014 13:45