Dateiinhalt in Zwischenablage für MSWord

  • VB.NET

Es gibt 3 Antworten in diesem Thema. Der letzte Beitrag () ist von MasterQ.

    Dateiinhalt in Zwischenablage für MSWord

    Hallo,

    es ist wieder Freitag und kurz bevor alle ins Wochenende abdüsen hänge ich hier mit einem Problem.

    Ich möchte per VB.NET mit Hilfer der Zwischenablage Textbausteine in Word von einem Dokument ins nächste übertragen. Die Textbausteine beinhalten auch Formatierungsvorgaben wie Überschriften, Textgröße, kursiv und auch Tabellen.

    Wenn ich per Hand in Word einen solchen Textbaustein in die Zwischenablage kopiere erhalte ich mögliche Datenformate, die ich in mal in ein Array übertragen habe.

    VB.NET-Quellcode

    1. Public Function readClipboard() As List(Of String)
    2. Dim o As IDataObject
    3. Dim ans As New List(Of String)
    4. Try
    5. o = My.Computer.Clipboard.GetDataObject
    6. For Each s As String In o.GetFormats
    7. ans.Add(s)
    8. Next
    9. Catch ex As Exception
    10. ans.Add("NN")
    11. End Try
    12. Return ans
    13. End Function


    Ein kleines Testtool liest nun die Zwischenablage aus und kopiert das dann direkt wieder zurück. Geht alles gut, müsste ich in Word über Strg+V den ursprünglichen Text mit allen Formatierungen wieder erhalten. Dem ist aber nicht so.

    Das Toolchen sieht so aus:

    VB.NET-Quellcode

    1. Dim sFormat As String() = {"Object Descriptor",
    2. "Rich Text Format",
    3. "HTML Format",
    4. "System.String",
    5. "Unicode Text",
    6. "Text",
    7. "EnhancedMetafile",
    8. "MetaFilePict",
    9. "Embed Source",
    10. "Link Source",
    11. "Link Source Descriptor",
    12. "ObjectLink",
    13. "Hyperlink"}
    14. Public Sub schaufeleClipboard(myIndex As Integer)
    15. Dim obj As New DataObject
    16. Try
    17. obj.SetData(My.Computer.Clipboard.GetData(sFormat(myIndex)))
    18. My.Computer.Clipboard.Clear()
    19. My.Computer.Clipboard.SetDataObject(obj)
    20. Catch ex As Exception
    21. MsgBox("transferfehler: " & ex.Message)
    22. End Try
    23. End Sub



    Mit keinem Format erhalte ich das gewünschte Ergebnis.

    Was mache ich denn da falsch?

    Gruß

    MQ
    @MasterQ Probierma das .NET ClipBoard an Stelle der VB6-Variante.
    =====
    Du musst zuerst testen, ob der entsprechende Inhalt vorhanden ist.
    Wenn der Inhalt ein anderer ist, wird die Zwischenablage gelöscht und im nächsten Versuch ist da nix mehr zu holen.

    VB.NET-Quellcode

    1. If Clipboard.ContainsText() Then
    2. ' Text holen und verarbeiten
    3. End If
    docs.microsoft.com/de-de/dotne…ard?view=netframework-4.8
    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).
    VB-Fragen über PN / Konversation werden ignoriert!

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „RodFromGermany“ ()

    nix besser

    Im Gegensatz zu vorher erhalte ich jetzt eine weitere Formatvariante, nämlich HyperlinkWordBkmk. Und mit diesem Format klappt es auch nicht. GetData bringt hier sogar NULL zurück.

    Der Inhalt ist vorhanden. Bei den Varianten Richtext bzw. HTML kommt schon Zeugs an. Nur wird es nicht als formatierter Text sondern unformatiert eingefügt. Ich sehe dann alle Steuerzeichen und Kontrollelemente als Text. Die Steuerzeichen werden nicht interpretiert. Gehe ich in Word über Inhalte Einfügen wird auch bei der Auswahl des Formates nur unformatierter Text angezeigt.

    MQ

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „MasterQ“ ()