von Stephan » Sa, 27.01.2018 10:34
Hallo,
ich finde bisher nur verschiedene Varianten von:
https://forum.openoffice.org/en/forum/v ... xt#p295435
Code: Alles auswählen
Global sTxtCString As String
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
End Sub
Function Tr_getTransferData( _
aFlavor as com.sun.star.datatransfer.DataFlavor)
If (aFlavor.MimeType = "text/plain;charset=utf-16") Then ' was = "text/plain;charset=utf-16" TRIED = "text/plain;charset=ISO-8859-1" TRIED ="text/html"
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" ' was = "text/plain;charset=utf-16" TRIED = "text/plain;charset=ISO-8859-1" TRIED = "text/richtext" TRIED ="text/html"
aFlavor.HumanPresentableName = "Text" ' was = "Unicode-Text" TRIED = "Text" TRIED = "Rich Text Format" TRIED ="HTML"
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 ' was = "text/plain;charset=utf-16" TRIED = "text/plain;charset=ISO-8859-1" TRIED ="text/html"
Tr_isDataFlavorSupported = true
Else
Tr_isDataFlavorSupported = false
End If
End Function
rufe ich, wie folgt auf:
Code: Alles auswählen
Sub Aufruf()
k = "nur" & CHR(13)
k = k & "ein" & CHR(13)
k = k & "test"
CopyToClipBoard(k)
End Sub
und füge dann den Inhalt der Zwischenablage (normal per Maus "Einfügen") ein, erhalte ich:
im Windows-Editor:
in Notepad++ (UTF8-fähiger Editor):
jedoch in OO/LO Writer
:
(also nur das erste Wort)
MS Word hat dasselbe Problem nicht, d.h. dort kann ich den, mit obigem Makro in der Zwischenablage erzeugten Inhalt, richtig (untereinander) einfügen.
Wie bekomme ich den Text so in die Zwischenablage, das
beim Einfügen in Writer die Darstellung ist wie obenstehend für Notepad++ gezeigt?
Hinweise:
(a)
das vorstehende Beispiel funktioniert auch für OO/LO wenn man statt CHR(13) nur einen Zeilenumbruch (CHR(10)) benutzt, aber dann ist das natürlich später in OO/LO nur ein Zeilenumbruch ... da das Einfügen manuell erfolgen muss kann man auch nicht einfach per Makro die Zeilenumbrüche gegen Absatzumbrüche austauschen, denn das kann ja erst NACH dem Einfügen erfolgen.
(b)
indirekte Lösungen per Selektion (oder Dispatcher), sind mir bekannt, z.B. von Andrew:
Code: Alles auswählen
Sub CopyToClipboard_API()
Dim o 'Übertragbarer Inhalt
Dim oClip 'Zwischenspeicher-Service
Dim oContents 'Inhalt des Zwischenspeichers
Dim sClipName As String
'Selektiert den gesamten Dokumentinhalt. Die Selektion ist kopierbar.
ThisComponent.CurrentController.select(ThisComponent.Text)
o = ThisComponent.CurrentController.getTransferable()
sClipName = "com.sun.star.datatransfer.clipboard.SystemClipboard"
oClip = CreateUnoService(sClipName)
'Überträgt die Auswahl in die Zwischenablage
oContents = oClip.setContents(o, Null)
End Sub
Wozu das Ganze?
aus einen Dialog möchte ich die Inhalte mehrerer Textfelder so in die Zwischenablage bekommen das sie beim anschließenden Einfügen in Writer untereinander stehen.
Wahrscheinlich, (ich habs noch nicht probiert) wäre die Notlösung die Texte in ein weiteres Textfeld im Dialog per Makro untereinander zu schreiben, per Makro zu selektieren (ähnlich/analog wie in CopyToClipboard_API()) und dann das Textfeld wieder auszublenden ...
Tja, lange Frage zu einem einfach geglaubten Problem, ich finde nur keine Lösung ...
Gruß
Stephan
Hallo,
ich finde bisher nur verschiedene Varianten von:
https://forum.openoffice.org/en/forum/viewtopic.php?f=45&t=66431&hilit=Clipboard+text#p295435
[code]Global sTxtCString As String
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
End Sub
Function Tr_getTransferData( _
aFlavor as com.sun.star.datatransfer.DataFlavor)
If (aFlavor.MimeType = "text/plain;charset=utf-16") Then ' was = "text/plain;charset=utf-16" TRIED = "text/plain;charset=ISO-8859-1" TRIED ="text/html"
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" ' was = "text/plain;charset=utf-16" TRIED = "text/plain;charset=ISO-8859-1" TRIED = "text/richtext" TRIED ="text/html"
aFlavor.HumanPresentableName = "Text" ' was = "Unicode-Text" TRIED = "Text" TRIED = "Rich Text Format" TRIED ="HTML"
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 ' was = "text/plain;charset=utf-16" TRIED = "text/plain;charset=ISO-8859-1" TRIED ="text/html"
Tr_isDataFlavorSupported = true
Else
Tr_isDataFlavorSupported = false
End If
End Function
[/code]
rufe ich, wie folgt auf:
[code]Sub Aufruf()
k = "nur" & CHR(13)
k = k & "ein" & CHR(13)
k = k & "test"
CopyToClipBoard(k)
End Sub[/code]
und füge dann den Inhalt der Zwischenablage (normal per Maus "Einfügen") ein, erhalte ich:
im Windows-Editor:
[code]nureintest[/code]
in Notepad++ (UTF8-fähiger Editor):
[code]nur
ein
test
[/code]
jedoch in OO/LO Writer :shock: :
[code]nur[/code]
(also nur das erste Wort)
[size=50]MS Word hat dasselbe Problem nicht, d.h. dort kann ich den, mit obigem Makro in der Zwischenablage erzeugten Inhalt, richtig (untereinander) einfügen.
[/size]
Wie bekomme ich den Text so in die Zwischenablage, das [u]beim Einfügen in Writer[/u] die Darstellung ist wie obenstehend für Notepad++ gezeigt?
Hinweise:
(a)
das vorstehende Beispiel funktioniert auch für OO/LO wenn man statt CHR(13) nur einen Zeilenumbruch (CHR(10)) benutzt, aber dann ist das natürlich später in OO/LO nur ein Zeilenumbruch ... da das Einfügen manuell erfolgen muss kann man auch nicht einfach per Makro die Zeilenumbrüche gegen Absatzumbrüche austauschen, denn das kann ja erst NACH dem Einfügen erfolgen.
(b)
indirekte Lösungen per Selektion (oder Dispatcher), sind mir bekannt, z.B. von Andrew:
[code]Sub CopyToClipboard_API()
Dim o 'Übertragbarer Inhalt
Dim oClip 'Zwischenspeicher-Service
Dim oContents 'Inhalt des Zwischenspeichers
Dim sClipName As String
'Selektiert den gesamten Dokumentinhalt. Die Selektion ist kopierbar.
ThisComponent.CurrentController.select(ThisComponent.Text)
o = ThisComponent.CurrentController.getTransferable()
sClipName = "com.sun.star.datatransfer.clipboard.SystemClipboard"
oClip = CreateUnoService(sClipName)
'Überträgt die Auswahl in die Zwischenablage
oContents = oClip.setContents(o, Null)
End Sub
[/code]
Wozu das Ganze?
aus einen Dialog möchte ich die Inhalte mehrerer Textfelder so in die Zwischenablage bekommen das sie beim anschließenden Einfügen in Writer untereinander stehen.
[size=85]Wahrscheinlich, (ich habs noch nicht probiert) wäre die [u]Notlösung [/u]die Texte in ein weiteres Textfeld im Dialog per Makro untereinander zu schreiben, per Makro zu selektieren (ähnlich/analog wie in CopyToClipboard_API()) und dann das Textfeld wieder auszublenden ...
[/size]
Tja, lange Frage zu einem einfach geglaubten Problem, ich finde nur keine Lösung ...
Gruß
Stephan