rtf in Word einfügen

  • VB.NET

Es gibt 8 Antworten in diesem Thema. Der letzte Beitrag () ist von Sarah.

    rtf in Word einfügen

    Hallo zusammen,

    ich häng mal wieder fest und komm leider trotz des Forums nicht weiter. ;(

    Ich habe eine Richtextbox mit einem formatierten Text.

    Dann hab ich eine Wordvorlage, die über Textmarken mit einfachen Strings gefüllt wird. jedoch muss an einer stelle auch der formatierte inhalt der RTB rein.

    Das krieg ich leider in keinster Weise nur ansatzweise hin. Entweder kommt der Text unformatiert oder als plumpe rtf.

    VB.NET-Quellcode

    1. Private Sub Word_schreiben()
    2. 'Vorlage kopieren
    3. IO.File.Copy(Vorlage, Pfad_DOC & TB_Nummer.Text & ".docx", True)
    4. ProgressBar1.Value = ProgressBar1.Value + 10
    5. 'Textmarker füllen
    6. Dim word As New Microsoft.Office.Interop.Word.Application
    7. Dim doc As Microsoft.Office.Interop.Word.Document
    8. Try
    9. doc = word.Documents.Open(Pfad_DOC & TB_Nummer.Text & ".docx")
    10. doc.Activate()
    11. doc.Bookmarks().Item("TB_Nummer").Range.Text = TB_Nummer.Text
    12. ProgressBar1.Value = ProgressBar1.Value + 5
    13. doc.Bookmarks().Item("TB_Titel").Range.Text = TB_Titel.Text
    14. ProgressBar1.Value = ProgressBar1.Value + 5
    15. doc.Bookmarks().Item("TB_Verfasser").Range.Text = TB_Verfasser.Text
    16. ProgressBar1.Value = ProgressBar1.Value + 5
    17. doc.Bookmarks().Item("TB_Verteiler").Range.Text = TB_Verteiler.Text
    18. ProgressBar1.Value = ProgressBar1.Value + 5
    19. doc.Bookmarks().Item("DTP_Datum").Range.Text = DTP_Datum.Value.ToString("dd.MM.yyyy")
    20. ProgressBar1.Value = ProgressBar1.Value + 5
    21. RTB.SelectAll()
    22. doc.Bookmarks().Item("RTB").Range.Text = RTB.SelectedRtf
    23. ProgressBar1.Value = ProgressBar1.Value + 5
    24. 'Neue Datei mit Datumsstempel speichern
    25. doc.SaveAs(Pfad_DOC & TB_Nummer.Text & "_" & DTP_Datum.Value.ToString("yyyy_MM_dd") & ".docx")
    26. 'als pdf speichern
    27. doc.SaveAs(Pfad_PDF & TB_Nummer.Text & ".pdf", WdSaveFormat.wdFormatPDF)
    28. ProgressBar1.Value = ProgressBar1.Value + 10
    29. doc.Close()
    30. 'Datei löschen
    31. IO.File.Delete(Pfad_DOC & TB_Nummer.Text & ".docx")
    32. ProgressBar1.Value = ProgressBar1.Value + 10
    33. 'pdf öffnen
    34. Process.Start(Pfad_PDF & TB_Nummer.Text & ".pdf")
    35. ProgressBar1.Value = ProgressBar1.Maximum
    36. Catch ex As Exception
    37. MessageBox.Show(ex.ToString)
    38. word.ActiveDocument.Close()
    39. End Try
    40. End Sub


    An Zeile 23/24 sollte die RTB eingefügt werden.

    Vielleicht kann mir ja jemand auf die Sprünge helfen.

    Vielen lieben Dank schon mal und

    Liebe Grüße
    Sarah
    @Sarah Was passiert da?
    Was erwartet Word an dieser Stelle?
    Gibt es RTF-Marken in Word?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    Sarah schrieb:

    Gibt es da was spezielles?
    Keine Ahnung, ich stell einfach passende Fragen.
    Ich fragte, was passiert, nicht aber was nicht passiert. ;)
    Es wäre schön, wenn Du von so einer missglückten Einfügung nen Screenshot posten könntest.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    @Sarah
    So wie ich das -> stackoverflow.com/a/35632661 verstehe, benötigt Word einen Konverter, um RTF in ein Dokument zu integrieren.
    Dieser Konverter wird nur ausgeführt, wenn
    1. Inhalte aus der Zwischenablage eingefügt werden,
    oder
    2. eine Datei geöffnet oder eingefügt wird.

    Mögliche Lösungen siehe hier -> stackoverflow.com/a/50835453
    oder hier -> stackoverflow.com/a/55503862
    @Sarah Genau das hatte ich befürchtet, der RTF-String wird als Text-String interpretiert.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Vorausgesetzt du kannst den farbig markierten Teil in die Zwischenablage kopieren (sollte gehen ;) )

    Dann kannst du mittels:

    VB.NET-Quellcode

    1. ​doc.Range().PasteAndFormat(Microsoft.Office.Interop.Word.WdRecoveryType.wdFormatOriginalFormatting)


    das auch exakt so wieder einfügen.

    Zur Demo: Ich habe in einem RTF-Doc einen Text geschrieben, den wild formatiert und ihn markiert und mittels STRG+C in die Zwischenablage gesteckt (das inkludiert das Format). Und danach mittels dieses Codes oben automatisch eingefügt. Klappt :)
    Yeah.... vielen vielen Dank! ... Ihr seid super!

    Ich schaffs jetzt den formatieren Text in Word einzufügen. :thumbsup:
    Im Moment wird noch das ganze Dokument damit überschrieben, aber ich denk das krieg ich noch hin.

    hier die Umsetzung:

    Spoiler anzeigen

    VB.NET-Quellcode

    1. Private Sub Word_schreiben()
    2. 'Vorlage kopieren
    3. IO.File.Copy(Vorlage, Pfad_DOC & TB_Nummer.Text & ".docx", True)
    4. ProgressBar1.Value = ProgressBar1.Value + 10
    5. 'Textmarker füllen
    6. Dim RTB_Datei As String = Pfad_RTB & TB_Nummer.Text & ".txt"
    7. Dim word As New Microsoft.Office.Interop.Word.Application
    8. Dim doc As Microsoft.Office.Interop.Word.Document
    9. Try
    10. doc = word.Documents.Open(Pfad_DOC & TB_Nummer.Text & ".docx")
    11. doc.Activate()
    12. doc.Bookmarks().Item("TB_Nummer").Range.Text = TB_Nummer.Text
    13. ProgressBar1.Value = ProgressBar1.Value + 5
    14. doc.Bookmarks().Item("TB_Titel").Range.Text = TB_Titel.Text
    15. ProgressBar1.Value = ProgressBar1.Value + 5
    16. doc.Bookmarks().Item("TB_Verfasser").Range.Text = TB_Verfasser.Text
    17. ProgressBar1.Value = ProgressBar1.Value + 5
    18. doc.Bookmarks().Item("TB_Verteiler").Range.Text = TB_Verteiler.Text
    19. ProgressBar1.Value = ProgressBar1.Value + 5
    20. doc.Bookmarks().Item("DTP_Datum").Range.Text = DTP_Datum.Value.ToString("dd.MM.yyyy")
    21. ProgressBar1.Value = ProgressBar1.Value + 5
    22. 'RTB über Zwischenspeicher in Word einfügen
    23. Clipboard.SetText(IO.File.ReadAllText(RTB_Datei, System.Text.Encoding.Default), TextDataFormat.Rtf)
    24. doc.Range().PasteAndFormat(Microsoft.Office.Interop.Word.WdRecoveryType.wdFormatOriginalFormatting)
    25. 'doc.Bookmarks().Item("RTB").Range.Text = RTB.SelectedRtf()
    26. ProgressBar1.Value = ProgressBar1.Value + 5
    27. 'Neue Datei mit Datumsstempel speichern
    28. doc.SaveAs(Pfad_DOC & TB_Nummer.Text & "_" & DTP_Datum.Value.ToString("yyyy_MM_dd") & ".docx")
    29. 'als pdf speichern
    30. doc.SaveAs(Pfad_PDF & TB_Nummer.Text & ".pdf", WdSaveFormat.wdFormatPDF)
    31. ProgressBar1.Value = ProgressBar1.Value + 10
    32. doc.Close()
    33. 'Datei löschen
    34. IO.File.Delete(Pfad_DOC & TB_Nummer.Text & ".docx")
    35. ProgressBar1.Value = ProgressBar1.Value + 10
    36. 'pdf öffnen
    37. Process.Start(Pfad_PDF & TB_Nummer.Text & ".pdf")
    38. ProgressBar1.Value = ProgressBar1.Maximum
    39. Catch ex As Exception
    40. MessageBox.Show(ex.ToString)
    41. word.ActiveDocument.Close()
    42. End Try
    43. End Sub


    Wünsch Euch allen ein schönes Wochenende!

    Liebe Grüße aus dem Allgäu
    Bilder
    • Unbenannt.JPG

      43,34 kB, 971×488, 43 mal angesehen