BITTE helfen Sie uns HEUTE mit einer SPENDE
Helfen Sie das LibreOffice Forum zu erhalten!

❤️ DANKE >><< DANKE ❤️

> KEINE WERBUNG FÜR REGISTRIERTE BENUTZER!<
Ihre Spende wird für die Deckung der laufenden Kosten sowie den Erhalt und Ausbau 🌱 des LibreOffice Forums verwendet.
🤗 Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet. 🤗

Zwischenablage befüllen / einfügen

Alles zur Programmierung im LibreOffice.
Eric March
Beiträge: 54
Registriert: Do 16. Jun 2011, 16:08

Zwischenablage befüllen / einfügen

Beitrag von Eric March » Do 9. Feb 2012, 20:55

Hallo!

Ich nehme mir eine Variable als einen Container her. Diese Variable befülle ich zum Beispiel mit Text aus einem Absatz oder dem Inhalt einer Tabellenzelle (also ganz bescheiden).
Frage: wie bekomme ich den Inhalt dieser Variable in die WIN-Zwischenablage? (Es geht hier nicht um z.B. Versuche zwischen Writer und Calc Daten auszutauschen, ich will das anderweitig verwenden).

Und nun das Ganze in die Gegenrichtung: Wie bekomme ich den Inhalt der Zwischenablage (ordnungsgemäß befüllt) in eine Variable?

Eric March

Benutzeravatar
karolus
Beiträge: 2170
Registriert: Fr 10. Dez 2010, 10:01

Re: Zwischenablage befüllen / einfügen

Beitrag von karolus » Do 9. Feb 2012, 21:44

Hallo
http://de.openoffice.info/search.php?st ... d%5B%5D=18

Da dürftest du fündig werden.

Karo
LO7.4.7.2 debian 12(bookworm) auf Raspberry4b 8GB (64bit)
LO7.6.3.2 flatpak debian 12(bookworm) auf Raspberry4b 8GB (64bit)

Eric March
Beiträge: 54
Registriert: Do 16. Jun 2011, 16:08

Re: Zwischenablage befüllen / einfügen

Beitrag von Eric March » So 12. Feb 2012, 10:35

Hallo!

Mir ist wohl das OOo-Forum bekannt. Aber warum dann nicht gleich Google vorschlagen?

Hier im Forum hatte ich Null Treffer und deswegen die Frage gestellt. 116 sind wiederum zu viele um zügig das zu finden was man wirklich braucht.
Denn genug Treffer dort laufen offenbar auf Copy-Paste hinaus (oder mehr was das hinterlässt), nicht aber auf das erwünschte Einlesen in eine Varaible.

Also suchen wir da mal nach »zwischenablage in variable«. 22 z.T. redundante Treffer, wie dieser [redigiert]:
Re: Zwischenablage leeren
Hallo
elchimforum hat geschrieben:kann man die Zwischenablage auslesen um Sie als Variable weiterverwerten?

Ja!
Karo


von Karolus
12.03.2011, 22:13
Forum: OOo Basic und Java
Thema: Zwischenablage leeren
Vielen Dank für die wirklich erschöpfende Hilfe.

Eric March

Benutzeravatar
karolus
Beiträge: 2170
Registriert: Fr 10. Dez 2010, 10:01

Re: Zwischenablage befüllen / einfügen

Beitrag von karolus » So 12. Feb 2012, 11:19

Hallo
Eric 116 Treffer sind schon zu viel für dich :twisted: , gut dann such ich dir was passendes raus:

http://de.openoffice.info/viewtopic.php ... ge#p169860

Am besten noch etwas Quellcode um Missverständnisse zu vermeiden:

Code: Alles auswählen

    Sub ImportClipboard
      Dim oClip, oClipContents, oTypes
      Dim oConverter, convertedString$
      Dim i%, iPlainLoc%

      iPlainLoc = -1

      oClip = createUnoService("com.sun.star.datatransfer.clipboard.SystemClipboard")
      oConverter = createUnoService("com.sun.star.script.Converter")

      oClipContents = oClip.getContents()
      oTypes = oClipContents.getTransferDataFlavors()

      Dim msg$, iLoc%, outS
      msg = ""
      iLoc = -1
      For i=LBound(oTypes) To UBound(oTypes)
        If oTypes(i).MimeType = "text/plain;charset=utf-16" Then
          iPlainLoc = i
          Exit For
        End If
         'msg = msg & "Mime type = " & x(ii).MimeType & " normal = " & x(ii).HumanPresentableName & Chr$(10)
      Next
      If (iPlainLoc >= 0) Then
        convertedString = oConverter.convertToSimpleType(oClipContents.getTransferData(oTypes(iPlainLoc)), com.sun.star.uno.TypeClass.STRING)
        msgbox convertedString
      Else
        MsgBox "Nichts zum Einfügen vorhanden"
      End If
    End Sub
Das waren etwa 15 min Arbeit - möchtest du meine Kontonr ?

Karo
LO7.4.7.2 debian 12(bookworm) auf Raspberry4b 8GB (64bit)
LO7.6.3.2 flatpak debian 12(bookworm) auf Raspberry4b 8GB (64bit)

Frieder
Beiträge: 28
Registriert: Di 13. Dez 2011, 12:28
Kontaktdaten:

Re: Zwischenablage befüllen / einfügen

Beitrag von Frieder » So 12. Feb 2012, 11:52

Hallo
@karolus : dein Codebeispiel macht genau das gegenteil.
Es holt Text aus der Zwischenablage.
@Eric March
Ich habe 1 minute gebraucht, um diesen code hier zu finden:
Quelle: http://openoffice.2283327.n4.nabble.com ... 68930.html

Code: Alles auswählen

Global sTxtCString AsString 

Sub  clipboard_1 
   sText ="123456" 
   CopyToClipBoard(sText) 
End  Sub 

Sub  CopyToClipBoard( sText ) 
   ' create SystemClipboard instance 
   oClip = CreateUnoService("com.sun.star.datatransfer.clipboard.SystemClipboard") 
   oTR = createUnoListener("Tr_", _ 
       "com.sun.star.datatransfer.XTransferable") 
   ' set data 
   oClip.setContents(oTR,Null) 
   sTxtCString = sText 
   'oClip.flushClipboard() ' does not work 
End  Sub 

Function  Tr_getTransferData(aFlavor as com.sun.star.datatransfer.DataFlavor) 
   If  (aFlavor.MimeType ="text/plain;charset=utf-16")Then 
     Tr_getTransferData() = sTxtCString 
   End  If 
End  Function 

Function  Tr_getTransferDataFlavors() 
   Dim  aFlavor As new com.sun.star.datatransfer.DataFlavor 
   aFlavor.MimeType ="text/plain;charset=utf-16" 
   aFlavor.HumanPresentableName ="Unicode-Text" 
   Tr_getTransferDataFlavors() = array(aFlavor) 
End  Function 

Function  Tr_isDataFlavorSupported(aFlavor as com.sun.star.datatransfer.DataFlavor) as Boolean 
   If  aFlavor.MimeType ="text/plain;charset=utf-16"  Then 
     Tr_isDataFlavorSupported = true 
   Else 
     Tr_isDataFlavorSupported = false 
   End  If 
End  Function
Das sollte dir weiterhelfen.

Gruß Frieder

Benutzeravatar
karolus
Beiträge: 2170
Registriert: Fr 10. Dez 2010, 10:01

Re: Zwischenablage befüllen / einfügen

Beitrag von karolus » So 12. Feb 2012, 12:04

Hallo
@ Frieder
Der Titel dieses Threads lautet "Zwischenablage befüllen / einfügen"

@Eric
Das Codebeispiel von Frieder findet sich schon im 2. Treffer der Such-url !

Gruß Karo
Zuletzt geändert von karolus am So 12. Feb 2012, 12:10, insgesamt 1-mal geändert.
LO7.4.7.2 debian 12(bookworm) auf Raspberry4b 8GB (64bit)
LO7.6.3.2 flatpak debian 12(bookworm) auf Raspberry4b 8GB (64bit)

Freelancer
Beiträge: 35
Registriert: Sa 28. Mai 2011, 15:30

Re: Zwischenablage befüllen / einfügen

Beitrag von Freelancer » So 12. Feb 2012, 12:08

Hallo,
Frieder hat geschrieben:Es holt Text aus der Zwischenablage.
So sollte es auch sein!
Eric March hat geschrieben:Wie bekomme ich den Inhalt der Zwischenablage (ordnungsgemäß befüllt) in eine Variable?
Eric March hat geschrieben:Hier im Forum hatte ich Null Treffer
Eric March hat geschrieben:Mir ist wohl das OOo-Forum bekannt.
Und warum hast Du dort nicht gesucht?
Eric March hat geschrieben:116 sind wiederum zu viele um zügig das zu finden was man wirklich braucht.
Hey, aber Zeit genug zum warten.


Eric, Dir ging es doch lediglich nur darum, dass Dir die Lösung auf dem Silbertablett präsentiert wird, was Karolus ja leider auch gemacht hat. :evil:

Freelancer

Eric March
Beiträge: 54
Registriert: Do 16. Jun 2011, 16:08

Re: Zwischenablage befüllen / einfügen

Beitrag von Eric March » So 12. Feb 2012, 12:37

Genug Zeit zum Warten?! Ich habe auch durchaus anderes zu tun - nicht freiwillg.
Und ich habe mir Teile diese 116 Treffer angesehen - und wollte gefundenen Code auch nachvollziehen können. Pures «rausholen, neinpappen und gut ist» gibts bei mir nicht.

Erstaunlich ist, dass plötzlich doch Codevorschläge kommen.
Ich weiß, dass OOo und LO zwar eng verwandt sind, aber betreff eines Problems in allein LO selbst wollte ich gerne ›zu Hause‹ bleiben.
Eric, Dir ging es doch lediglich nur darum, dass Dir die Lösung auf dem Silbertablett präsentiert wird, was Karolus ja leider auch gemacht hat. :evil:
Es scheint hier im Forum ein netter Ton zu herrschen. Man bekommt Links hingeworfen, engt eine beachtliche Trefferzahl (Resultat einer gar nicht auf meine Fall direkt zutreffenden Suchanfrage…) ein und trifft auf eine vom Tippgeber auf die man dem wirklich nur noch „Danke fürs den Bärendienst.“ antworten kann.
Lieber Freelancer, unter einem Silbertablett verstehe ich als Programmierer ganz was anderes. Aber ein oder zwei Deeplinks oder simpel Programmcode hätten es getrost sein dürfen. So wie jetzt.

Also denn - ich habe mittlerweile dort gesucht und geprüft (und nicht im Forum auf Antworten gelauert) und fand den (von mir aufs Erforderliche eingekürtzen) Code unten. Die Codes oben werde ich anschließend testen.

Code: Alles auswählen

Sub ConvertClipToText
Dim oClip, oClipContents, oTypes
Dim oConverter, convertedString$
Dim i%, iPlainLoc%

 iPlainLoc = -1
 oClip = createUnoService("com.sun.star.datatransfer.clipboard.SystemClipboard")
 oConverter = createUnoService("com.sun.star.script.Converter")
 oClipContents = oClip.getContents()
 oTypes = oClipContents.getTransferDataFlavors()

 For i=LBound(oTypes) To UBound(oTypes)
  If oTypes(i).MimeType = "text/plain;charset=utf-16" Then
   iPlainLoc = i
   Exit For
  End If
 Next
   
 If (iPlainLoc >= 0) Then
  TextClipboard = oConverter.convertToSimpleType(oClipContents.getTransferData(oTypes(iPlainLoc)), com.sun.star.uno.TypeClass.STRING)
 End If

print TextClipboard

End Sub
Ich kann hier grundsätzlich nach vollziehen was passiert. Aber schon kommt eine Frage nur nächsten: Wenn ich einfach zwei Zeilen vom Code markiere um die Zwischenablage zu füllen, was läuft da bei PRINT ab, dass ich zwei Meldungsboxen erhalte statt z.B. eine mit umbrochenem Text?

(Ach, welch Zufall - ich sehe gerade, dass das effektiv der Code von Karolus mit der Kontonummer ist. Vielen Dank auch.
Zum Silbertabeltt gehören ein paar REMs, keine DIMs mittendrin und mit ' stillgelegte Funktionen die besagte DIMs erfordern…
Zumindest ein paar Stichworte zu den typischen Sysmtefunktionen, wenn nicht die Namen sprechend sind, und was sie da tun wäre nicht verkehrt.)

Eric March

Eric March
Beiträge: 54
Registriert: Do 16. Jun 2011, 16:08

Re: Zwischenablage befüllen / einfügen

Beitrag von Eric March » So 12. Feb 2012, 13:17

Betreff des Codes von Frieder, So 12. Feb 2012, 12:52 [Interessant; irgendeine Systemuhr tickt da falsch, ich hab gerade erst 12:49 nach Braunschweig.]
Tut mir Leid, aber ich kriege dort Fehler gemeldet.
Global sTxtCString AsString, sTxtCString ,markiert: Basic Syntaxfehler. Erwartet: ,.

Wenn schon die Quellen Leerzeichen unterschlagen (auch ich sehe, dass es «As String» heißen muss), was mag sonst noch irgendwo fehlen? Wenn sich selbst auf http://www.starbasicfaq.de/index.html zum Teil ordentliche Vertipper finden (die so gut sind, dass man sie wenigstens instinktiv findet und behebt), wer will mir verübeln, dass ich hier etwas mehr nachhake?

Mit dem Leerzeichen läuft der Code. Und Programmierschlamperei (durch mich) gegen Fehlerbehandlung, was passiert da, dass so viele Programmmodule ineinandergreifen müssen? Auch ist mir das mit dem UTF-16 und dem UniCode nicht klar weswegen damit umgegangen wird.
Wenn wir uns darauf beschränken, dass der doofe Programmierer (ich) nur in Windows operiert und einzig Stringvariablen [oder das was im Zweifelsfall als eine Ausgabe für PRINT taugen täte - also keine Arrays] hernimmt um sie in die Zwischenablage zu bringen, wie weit könnte der Code dann reduziert werden? (Persönlich halte ich von Einleitungsmakros wie clipboard_1, die auch gleich den Code des aufgerufenen 2. Porgrammmoduls enthalten könnten, nichts. Wenn wiederum ein darin aufgerufener Code nur einmal im Prozedere benötigt wird setze ich ihn gerne gleich an Ort und Stelle. Motto: GoSubs nur da wo mehrere drauf zugreifen oder mehrmals aber nicht in einer Schleife.)

Eric March
…der gerne etwas lernen will und nicht nur Gegebenes kritiklos einsetzen.

Benutzeravatar
karolus
Beiträge: 2170
Registriert: Fr 10. Dez 2010, 10:01

Re: Zwischenablage befüllen / einfügen

Beitrag von karolus » So 12. Feb 2012, 14:14

Hallo
Wenn wir uns darauf beschränken, dass der doofe Programmierer (ich) nur in Windows operiert und einzig Stringvariablen [oder das was im Zweifelsfall als eine Ausgabe für PRINT taugen täte - also keine Arrays] hernimmt um sie in die Zwischenablage zu bringen, wie weit könnte der Code dann reduziert werden?
Beschreib doch einfach mal die konkrete Aufgabenstellung, evtl. gehts ja noch einfacher ohne das die Zwischenablage involviert wird.
(Persönlich halte ich von Einleitungsmakros wie clipboard_1, die auch gleich den Code des aufgerufenen 2. Porgrammmoduls enthalten könnten, nichts. Wenn wiederum ein darin aufgerufener Code nur einmal im Prozedere benötigt wird setze ich ihn gerne gleich an Ort und Stelle. Motto: GoSubs nur da wo mehrere drauf zugreifen oder mehrmals aber nicht in einer Schleife.)
Ich halte nichts von "Spaghetti"-code, in dem alles in eine sub gesteckt wird.

Deine andern etwas wirren Aussagen kommentier ich mal nicht.

Karo
LO7.4.7.2 debian 12(bookworm) auf Raspberry4b 8GB (64bit)
LO7.6.3.2 flatpak debian 12(bookworm) auf Raspberry4b 8GB (64bit)

An alle, die das LibreOffice-Forum nutzen:


Bitte beteiligen Sie sich mit 7 Euro pro Monat und helfen uns bei unserem Budget für das Jahr 2024.
Einfach per Kreditkarte oder PayPal.
Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet.

❤️ Vielen lieben Dank für Ihre Unterstützung ❤️

Antworten