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
Code: Alles auswählen
Sub Aufruf()
k = "nur" & CHR(13)
k = k & "ein" & CHR(13)
k = k & "test"
CopyToClipBoard(k)
End Sub
im Windows-Editor:
Code: Alles auswählen
nureintest
Code: Alles auswählen
nur
ein
test
Code: Alles auswählen
nur
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
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