Hallo an alle Leser hier im Forum,
normalerweise ist die Nutzung von DDE in Calc keine große Sache und ich hatte bislang auch noch keine Schwierigkeiten im Definieren der DDE-Pfade; nicht nur unter Calc - auch aus Fremdquellen mit DDE-Server nach Calc. Jetzt bin ich aber bei einem Problem, welches mich fast verzweifeln lässt. Mit meinen Kenntnissen komme ich nicht weiter und vielleicht hat jemand schon ähnliche Gedanken angestellt.
Die Aufgabe
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Der Zellinhalt von A1 soll per DDE mit der Zwischenablage verknüpft werden. Ändert sich der Inhalt vom Clipboard, so soll sich auch der Inhalt von A1 ändern.
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Gibt es eine Möglichkeit, einen entsprechenden Code zu hinterlegen, welcher diese DDE-Abfrage erledigt? Oder gäbe es ein Alternativ-Clipboard mit DDE-Server? Meine Suche bei Google führt mich bislang im Kreis.
Ich freue mich über jeden Hinweis von euch um diese knifflige Nuss zu knacken.
LG
DDE-Abfrage zur Zwischenablage (clipbrd.exe)
Moderator: Moderatoren
-
- **
- Beiträge: 26
- Registriert: Di, 12.03.2013 12:46
Re: DDE-Abfrage zur Zwischenablage (clipbrd.exe)
Hi,
wenn es nicht DDE sein muss,
anbei eine Datei mit Makro, das einen registriert, die Datei "merkt", wenn etwas in die Zwischenablage kopiert wird und schreibt es in Zelle A1 der Tabelle 1
Hier der CodeDas Makro AddClipboardListener zur Erzeugung des Listeners, habe ich an das Dokumentereignis Ansicht wurde erzeugt gehängt, wird die Ansicht geschlossen, wird der Listener mit dem Makro RemoveClipboardListener wieder beendet.
Gruß R
EDIT: Momentan klappt es nur mit reinem Text, wenn du ein anderes Format brauchst, sag bescheid, dann versuche ich das umzubauen.
wenn es nicht DDE sein muss,
anbei eine Datei mit Makro, das einen
Code: Alles auswählen
com.sun.star.datatransfer.clipboard.XClipboardListener
Hier der Code
Code: Alles auswählen
global oClipboardListener
global oClipboardHandle
Sub AddClipboardListener
oClipboardListener = CreateUnoListener( "ClipboardListener_", "com.sun.star.datatransfer.clipboard.XClipboardListener" )
oClipboardHandle = createUnoService("com.sun.star.datatransfer.clipboard.SystemClipboard")
oClipboardHandle.addClipboardListener(oClipboardListener)
End Sub
Sub RemoveClipboardListener
On Error Resume Next
oClipboardHandle.removeClipboardListener(oClipboardListener)
End Sub
Sub ClipboardListener_changedContents(oEvent)
osheet = Thiscomponent.sheets(0)
oData = oEvent.Contents
oDataTypSeq = oData.getTransferDataFlavors
sValue = oData.getTransferData(oDataTypSeq(0))
oCellA1 = osheet.getcellbyposition(0,0)
oCellA1.String = sValue
End Sub
Sub ClipboardListener_disposing
end sub
Gruß R
EDIT: Momentan klappt es nur mit reinem Text, wenn du ein anderes Format brauchst, sag bescheid, dann versuche ich das umzubauen.
- Dateianhänge
-
- InsertClipboardToA1.ods
- (8.98 KiB) 101-mal heruntergeladen
- miniKasse MMove 1.0.6 Base Videotutorial
- Windows 11: AOO, LO Linux Mint: AOO, LO
-
- **
- Beiträge: 26
- Registriert: Di, 12.03.2013 12:46
Re: DDE-Abfrage zur Zwischenablage (clipbrd.exe)
Hallo R.
ich danke dir in außerordentlicher Weise für deine schnelle und zielgerichtete Hilfe. Es funktioniert so wie es soll. Selber hätte ich das niemals lösen können und man sieht wieder einmal, dass es eben Leute braucht, die vom Fach sind. Ganz toll!
Liebe Grüße
Ronny
ich danke dir in außerordentlicher Weise für deine schnelle und zielgerichtete Hilfe. Es funktioniert so wie es soll. Selber hätte ich das niemals lösen können und man sieht wieder einmal, dass es eben Leute braucht, die vom Fach sind. Ganz toll!
Liebe Grüße
Ronny
-
- **
- Beiträge: 26
- Registriert: Di, 12.03.2013 12:46
Re: DDE-Abfrage zur Zwischenablage (clipbrd.exe)
Hallo R.,
ich habe heute ausführlich getestet und unter Vista funktioniert es absolut fehlerfrei; nicht nur mit reinem Text, sondern auch mit Zahlen bzw. Mischinhalt sowie Sonderzeichen. Der ClipboardListener reagiert dabei sowohl auf händisches Kopieren als auch auf automatisches über die Eingabeaufforderung bzw. Batch-Datei - dies auch sehr rasch und ohne merkliche Verzögerung.
Bei XP hingegen klappt es nur dann, wenn ich es händisch kopiere. Versuche ich einen Kopiervorgang in der Eingabeaufforderung bzw. über eine Batch-Datei, so wird nachweislich jedes Mal zwar etwas im Clipboard hinterlegt, aber es wird nichts daraus übernommen ins Feld A1. Stattdessen erscheint folgende Fehlermeldung mit Aufpoppen des Makros:
BASIC-Laufzeitfehler. Objektvariable nicht belegt.
Hinweispfeil auf Zeile: oCellA1.String = sValue
Nach Wegdrücken kommt eine zweite identische Warnmeldung. Erst dann lässt sich das Makro-Fenster schließen.
Ich habe das automatische Kopieren auf mehreren Wegen versucht.
1.
type "C:\...Pfad...XYZ.txt" | clip (...so läuft es unter Vista Home Premium 32 bit)
2.
clip < "C:\...Pfad...XYZ.txt"
3.
cliptext from "C:\...Pfad...XYZ.txt" (Programm ClipText von Horst Schaeffer)
In allen drei Fällen wird der zu kopierende Inhalt ins Clipboard übernommen ... aber eben nicht in A1 angezeigt.
LG
Ronny
ich habe heute ausführlich getestet und unter Vista funktioniert es absolut fehlerfrei; nicht nur mit reinem Text, sondern auch mit Zahlen bzw. Mischinhalt sowie Sonderzeichen. Der ClipboardListener reagiert dabei sowohl auf händisches Kopieren als auch auf automatisches über die Eingabeaufforderung bzw. Batch-Datei - dies auch sehr rasch und ohne merkliche Verzögerung.
Bei XP hingegen klappt es nur dann, wenn ich es händisch kopiere. Versuche ich einen Kopiervorgang in der Eingabeaufforderung bzw. über eine Batch-Datei, so wird nachweislich jedes Mal zwar etwas im Clipboard hinterlegt, aber es wird nichts daraus übernommen ins Feld A1. Stattdessen erscheint folgende Fehlermeldung mit Aufpoppen des Makros:
BASIC-Laufzeitfehler. Objektvariable nicht belegt.
Hinweispfeil auf Zeile: oCellA1.String = sValue
Nach Wegdrücken kommt eine zweite identische Warnmeldung. Erst dann lässt sich das Makro-Fenster schließen.
Ich habe das automatische Kopieren auf mehreren Wegen versucht.
1.
type "C:\...Pfad...XYZ.txt" | clip (...so läuft es unter Vista Home Premium 32 bit)
2.
clip < "C:\...Pfad...XYZ.txt"
3.
cliptext from "C:\...Pfad...XYZ.txt" (Programm ClipText von Horst Schaeffer)
In allen drei Fällen wird der zu kopierende Inhalt ins Clipboard übernommen ... aber eben nicht in A1 angezeigt.
LG
Ronny
Re: DDE-Abfrage zur Zwischenablage (clipbrd.exe)
Tja, da musst du dann wohl selber forschen ...
Gruß R
Gruß R
- miniKasse MMove 1.0.6 Base Videotutorial
- Windows 11: AOO, LO Linux Mint: AOO, LO
-
- **
- Beiträge: 26
- Registriert: Di, 12.03.2013 12:46
Re: DDE-Abfrage zur Zwischenablage (clipbrd.exe)
Hallo R.,
ich komme leider nicht auf die Lösung der beschriebenen Problematik. Unter Aufrufen von clipbrd und der Kontrolle der Zwischenablage werden in allen 3 genannten Fällen Inhalte dorthin kopiert. Es ist mir unklar, weshalb sich das Makro mit der Fehlermeldung auftut, obwohl die Daten im Gleichschritt in die Zwischenablage geschrieben werden. Es findet doch eine Veränderung des Clipboard-Inhaltes statt - ergo sollte es in A1 erscheinen.
Wenn es grundsätzlich nicht gehen würde, hätte ich dasselbe Phänomen unter Vista - wo es aber problemlos funktioniert. Und weshalb sollte es nur mit reinem Text funktionieren (siehe EDIT)? Es geht mit allen Zeichen; Zahlen, Buchstaben und sogar Sonderzeichen.
Leider kann ich den ?BASIC?-Code in der betreffenden Zeile nicht verstehen, da ich kein Informatiker bin. Welche Objektvariable kann nicht belegt werden? Was wäre eine mögliche Erklärung?
Hat jemand hier im Forum unter Umständen auch schon einmal denselben Laufzeitfehler erhalten und eine mögliche Ursache gefunden? Behindern sich die Batch-Datei und das Makro gfs. untereinander?
LG
R.
_________________
Moderation: Thema verschoben von OOo Calc nach OOo Basic und Java, wo alle Themen zur individuellen Programmierung hingehören.—lorbass, Moderator
ich komme leider nicht auf die Lösung der beschriebenen Problematik. Unter Aufrufen von clipbrd und der Kontrolle der Zwischenablage werden in allen 3 genannten Fällen Inhalte dorthin kopiert. Es ist mir unklar, weshalb sich das Makro mit der Fehlermeldung auftut, obwohl die Daten im Gleichschritt in die Zwischenablage geschrieben werden. Es findet doch eine Veränderung des Clipboard-Inhaltes statt - ergo sollte es in A1 erscheinen.
Wenn es grundsätzlich nicht gehen würde, hätte ich dasselbe Phänomen unter Vista - wo es aber problemlos funktioniert. Und weshalb sollte es nur mit reinem Text funktionieren (siehe EDIT)? Es geht mit allen Zeichen; Zahlen, Buchstaben und sogar Sonderzeichen.
Leider kann ich den ?BASIC?-Code in der betreffenden Zeile nicht verstehen, da ich kein Informatiker bin. Welche Objektvariable kann nicht belegt werden? Was wäre eine mögliche Erklärung?
Hat jemand hier im Forum unter Umständen auch schon einmal denselben Laufzeitfehler erhalten und eine mögliche Ursache gefunden? Behindern sich die Batch-Datei und das Makro gfs. untereinander?
LG
R.

_________________
Moderation: Thema verschoben von OOo Calc nach OOo Basic und Java, wo alle Themen zur individuellen Programmierung hingehören.—lorbass, Moderator