Clipboard in DataObject Variable und zurück klappt nicht.

  • VB.NET

Es gibt 16 Antworten in diesem Thema. Der letzte Beitrag () ist von Broco.

    Clipboard in DataObject Variable und zurück klappt nicht.

    Ich bekomme es nicht hin, den Inhalt einer Worddatei ins Clipboard zu kopieren, dann in ein DataObject, von da wieder ins Clipboard und dann wieder in Word (soll von einer Worddatei in die andere übertragen).

    Quellcode

    1. Diese Methode oder Eigenschaft ist nicht verfügbar, weil die Zwischenablage leer oder ungültig ist..



    Relevanter Code:

    VB.NET-Quellcode

    1. Public stammdatenpage As New DataObject
    2. '......................
    3. doc_stamm.Range.WholeStory()
    4. doc_stamm.Range.Copy()
    5. stammdatenpage.SetData(Clipboard.GetDataObject)
    6. Clipboard.Clear()
    7. '......................
    8. Clipboard.SetDataObject(stammdatenpage)
    9. doc_wordnew.Range.Paste()

    Wenn ich direkt von Word ins Clipboard und dann wieder in Word kopiere gehts aber...
    Ich bin am Ende und gehe jetzt frustriert schlafen...
    Vielleicht beschäftigst Du Dich mal mit dem ClipBoard als solchem.
    Es unterstützt beliebige Formate, von denen eine Reihe einfach so verfügbar sind: Text, RichText, Images usw.
    Wenn Word einen Text in die Zwischenablage kopiert, ist das ein Spezialformat.
    Wenn Du dieses Format bei Dir reinkopieren möchtest, musst Du genau dieses (Spezial-) Format auslesen.
    Wenn ein Bild in der Zwischenablage drin ist, kannst Du dies auch nicht im Notepad einfügen.
    Genau so kannst Du gleichzeitig sowohl einen Text als auch einen RichText in die Zwischenablage kopieren.
    Je nach dem, was Du anforderst, bekommst Du den einen oder den anderen zurück.
    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!
    Ja ok, das verstehe ich. Aber warum ist die Angabe eines Dateitypen nicht verpflichtend? Kann er das nicht offen lassen?
    Und falls tatsächlich nur so geht, welchen Parameter muss ich denn dann nehmen?

    Generell ist das Vorgehen aber ok?
    Theoretisch ja, indem ich mit temporären Dateien arbeite...
    Ich erzeuge ja zur Laufzeit eine Worddatei und manipuliere vorher eine Wordvorlage und eine Excelvorlage. Die Daten daraus sollen in die Worddatei eingefügt werden, danach werden noch mehrere andere Wordvorlagen an die Datei angefügt.

    Ich wüsste nicht, wie ich das ohne die Zwischenspeicherung machen soll. Außerdem wollte ich dem User gern sein Clipboard lassen, indem ich es erst speichere, dann das Programm ausführe und dann das Clipboard wieder mit dem Ursprungsinhalt befülle.

    Wenn man aber zwingend einen Datentypen für das Dataobjekt braucht, dann kann ich das natürlich knicken.

    WordObject.Copy kopiert doch auch in die Zwischenablage, oder?
    Wie mache ich das denn dann mit Excel?

    Broco schrieb:

    dann kann ich das natürlich knicken.
    Warum?
    Experimentiere doch zunächst mal mit Word und Zwischenablage.
    Frage das Format ab und probiere mal, das Word-Format zu emulieren.
    Ggf. musst Du da auf API-Routinen ausweichen.
    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!
    Naja, das Kopieren und Einfügen an sich klappt ja. Ich dachte, man kann einfach ein undefiniertes DataObject erstelellen, dass die Daten aus dem Clipboard sozusagen "roh" entgegennimmt und beim Zurückladen wieder erkennt, schließlich sind es ja die gleichen Daten wie vorher.

    API? Ich bin Anfänger, da bräucht ich ein Tutorial zu :D

    Wie frage ich denn das Format ab? Zur Not mach ich halt temporäre Dateien. Ist zwar nicht hübsch, aber geht wenigstens...

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Broco“ ()

    Broco schrieb:

    Wie frage ich denn das Format ab?
    Mit .NET so:

    Oder mach es mit Object, wenn es geht.
    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!

    RodFromGermany schrieb:

    Oder mach es mit Object, wenn es geht.

    Wie meinst du das?

    Danke aber erst mal für den Tip mit dem auslesen.
    Er erkennt den Clipboardinhalt als Text, aber das ist ja nicht das gewünschte.
    Mit dem Text an sich klappt das, also ich kann jetzt den Text aus dem Clipboard in die Variable schreiben, wieder ins Clipboard laden und dann in Word schreiben.
    ABER: So kann ich das trotzdem nicht gebrauchen, da auf der Seite auch ein Bild und 2 Tabellen sind, die sind dann natürlich weg und der Text ist unformatiert.

    Gibt es nicht ne andere Möglichkeit, das Clipboard so wie es ist auszulesen und dann genau so wieder zu beschreiben? Unabhängig von den abgelegten Daten? Von mir aus auch als Stream oder was weiß ich.

    Broco schrieb:

    Er erkennt den Clipboardinhalt als Text
    Völlig korrekt, denn Du kannst ja ein (kleines) Winword-Dokument locker im Notepad einfügen, woran Du siehst, dass da schon mal mindestens 2 verschiedene Formate drin sind.
    Was Dir vorschwebt ist von Dir leider (noch) nicht zu realisieren.
    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!
    Ja, das ist mir schon klar, aber wie übernehme ich nun die Formatierung? :D

    Kannst ruhig ehrlich sein. Wenn du meinst, dass das nicht so ohne weiteres machbar ist, dann erstell ich halt temporäre Dateien. Ist zwar nicht hübsch, aber dann läuft es wenigstens. :P

    Broco schrieb:

    aber wie übernehme ich nun die Formatierung?
    Keine Ahnung, vlt mit einem Word-PlugIn?
    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!
    Ja, aber das kann ja nicht sein. Es muss doch soetwas wie ein Rohdatenformat geben.
    Ich mein, das Clipboard macht das doch so.
    Kopierst du aus Word und fügst in den Texteditor ein, wird es automatisch in Text übernommen, kopierst du von Word in Word, bleibt die Formatierung. Kopierst du von Excel nach Word, kannst du dir das Format, als das eingefügt wird, aussuchen, bzw. Word wandelt das um (z.B. in ein Bild).
    Es muss doch also so etwas wie einen "Rohdatenspeicher" geben.

    Irgendeine Möglichkeit, Daten völlig unformatiert zu speichern und dann beim Einfügen wie gewünscht zu formatieren.

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

    Broco schrieb:

    Ich mein, das Clipboard machst das doch so.
    Dem ClipBoard kannst Du ieinen Speicherinhalt reinklatschen und sagst ihm, der Inhalt heißt WordFormat (oder so).
    Danach klatschst Du ihm zusätzlich einen unformatierten Text rein und sagst, der 2. Inhalt heißt TextFormat.
    Wenn Du das nun im Notepad einfügen möchtest, schaut das NotePad nach, ob etwas im TextFormat vorhanden ist und wenn ja, kannst Du es einfügen.
    Wenn Du dann das in Word einfügen möchtest, schaut Word nach, ob Text im WordFormat oder TextFormat vorhanden ist, und wenn ja, wird es eingefügt; wenn beides da ist, dann das im WordFormat vorliegende, ansonsten das im TextFormat vorliegende.
    Das Clipboard interessiert sich nicht für die Inhalte, es verwaltet sie nur.
    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!
    @Broco: Hatten wir schon:

    RodFromGermany schrieb:

    Oder mach es mit Object, wenn es geht.
    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!
    EDIT:

    ICH HABS :thumbsup:

    VB.NET-Quellcode

    1. doc_stamm.Range.WholeStory()
    2. doc_stamm.Range.Copy()
    3. Dim testvariable As New DataObject
    4. testvariable.SetData(DataFormats.Rtf, Clipboard.GetData(DataFormats.Rtf))
    5. Clipboard.Clear()
    6. Clipboard.SetData(DataFormats.Rtf, testvariable.GetData(DataFormats.Rtf))


    Und zum kopieren von Excel in Word als Bild geht DataFormats.MetafilePict
    HTML funktioniert nur so halb, da werden die Formatierungen für Bilder versaut.

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Broco“ ()