Daten aus Array nach Zwischenablage entladen

Programmierung unter AOO/LO (StarBasic, Python, Java, ...)

Moderator: Moderatoren

Postbyme
***
Beiträge: 63
Registriert: Mo, 27.11.2017 18:42

Daten aus Array nach Zwischenablage entladen

Beitrag von Postbyme » So, 03.11.2019 21:48

Hallo,
habe einige Textzeilen in einem eindimensionalen Array und möchte diese Daten nun in einer Schleife in die Zwischenablage entladen (als Sätze untereinander).
In der A00-Dokumentation habe ich diesen Weg als Service nicht beschrieben gefunden. Kann mir da jemand weiter helfen?
Oder muss ich die Daten erst in einen Tabellenbereich entladen um sie dann mit

go_doc = thisComponent
go_t2 = go_doc.sheets(1)
oDispatcher = CreateUnoService("com.sun.star.frame.DispatchHelper")
oFrame1 = go_doc.CurrentController.Frame
'Die Zellen A1:B2 werden über den Controller ausgewählt.
oSheet = go_doc.Sheets(1)
oRng = oSheet.getCellRangeByName("A33:A35")
go_doc.CurrentController.select(oRng)
'Mit einem Dispatch-Befehl wird in die Zwischenablage kopiert.
oDispatcher.executeDispatch(oFrame1, ".uno:Copy", "", 0, Array())

in die Zwischenablage zu bringen?

Vielen Dank
-------------------------------------------------------
Windows 10 1903 /Libre Office 6.3.3.2 (x64)

Stephan
********
Beiträge: 11286
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: Daten aus Array nach Zwischenablage entladen

Beitrag von Stephan » So, 03.11.2019 22:02

z.B.:

Code: Alles auswählen

Global sTxtCString As String

Sub Start()
	x = Array("aa","bb","cc")
	For i = 0 To Ubound(x())
		k = k & x(i) & CHR(13) & CHR(10)
	Next i
	CopyToClipBoard(k)
End Sub
  
Sub CopyToClipBoard( sText ) 
  Dim oClip, oTR
  ' 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

aus:
https://forum.openoffice.org/en/forum/v ... rd#p355824


Gruß
Stephan

Postbyme
***
Beiträge: 63
Registriert: Mo, 27.11.2017 18:42

Re: Daten aus Array nach Zwischenablage entladen

Beitrag von Postbyme » Mo, 04.11.2019 08:15

Hallo Stephan,
oh das werde ich heute abend einmal studieren und ausprobieren.
Vielen Dank

Winni
-------------------------------------------------------
Windows 10 1903 /Libre Office 6.3.3.2 (x64)

Postbyme
***
Beiträge: 63
Registriert: Mo, 27.11.2017 18:42

Re: Daten aus Array nach Zwischenablage entladen

Beitrag von Postbyme » Mo, 04.11.2019 21:11

Funktioniert leider nicht in A00 bei mir unter Windows 10.
Wenn ich den Code durchlaufe dann springt er plötzlich komisch und AOO hängt sich auf.
Schade!
-------------------------------------------------------
Windows 10 1903 /Libre Office 6.3.3.2 (x64)

Stephan
********
Beiträge: 11286
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: Daten aus Array nach Zwischenablage entladen

Beitrag von Stephan » Di, 05.11.2019 09:11

Dann mache es über ein Dokument:

Code: Alles auswählen

Sub Main()
	Dim arg(0) as New com.sun.star.beans.PropertyValue
	arg(0).Name = "Hidden" 
	arg(0).Value = True
	
	x = Array("aa","bb","cc")
	For i = 0 To Ubound(x())
		k = k & x(i) & CHR(13)
	Next i
	
	x = StarDesktop.loadComponentFromURL ("private:factory/swriter","_blank", 0, arg())
	x.Text.String = LEFT(k, LEN(k)-1)
	ccf = x.CurrentController.Frame
	With createUnoService("com.sun.star.frame.DispatchHelper")
		.executeDispatch(ccf, ".uno:SelectAll", "", 0, Array())
		.executeDispatch(ccf, ".uno:Copy", "", 0, Array())
	End With

	x.close(true)
End Sub
Gruß
Stephan

Postbyme
***
Beiträge: 63
Registriert: Mo, 27.11.2017 18:42

Re: Daten aus Array nach Zwischenablage entladen

Beitrag von Postbyme » Do, 07.11.2019 13:30

ja, so klappt es. Super!
Danke
-------------------------------------------------------
Windows 10 1903 /Libre Office 6.3.3.2 (x64)

Postbyme
***
Beiträge: 63
Registriert: Mo, 27.11.2017 18:42

Re: Daten aus Array nach Zwischenablage entladen

Beitrag von Postbyme » Sa, 09.11.2019 09:25

Hallo Stephan,
würde dem Text gleich eine nichtproportionale Schriftart mitgeben wollen (z.B. DejaVu Sans Mono). Wie würde das funktionieren?

Mein Problem:

VBA-Code:

Code: Alles auswählen

 la_ab(li_abzeile) = " | Rechnungsbetrag " & string(42," ") & "| " & ls_repr & " |"
Mein Problem ist, das er beim reinkopieren dieses Zwischenablagetextets in unterschiedliche Tools (Notepad, Thunderbird, hier in Forumbeitrag) die string(42," ") weglässt. CHR$(32) geht auch nicht. Nach Notepad klappts!

Werde noch zum "Hirsch" :cry:

Danke
Gruß
Winni
-------------------------------------------------------
Windows 10 1903 /Libre Office 6.3.3.2 (x64)

Stephan
********
Beiträge: 11286
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: Daten aus Array nach Zwischenablage entladen

Beitrag von Stephan » Sa, 09.11.2019 12:49

Wie würde das funktionieren?

z.B.:

Code: Alles auswählen

Sub Main()
	Dim arg(0) as New com.sun.star.beans.PropertyValue
	arg(0).Name = "Hidden" 
	arg(0).Value = True
	
	dim args2(4) as new com.sun.star.beans.PropertyValue
	args2(0).Name = "CharFontName.StyleName"
	args2(0).Value = ""
	args2(1).Name = "CharFontName.Pitch"
	args2(1).Value = 0
	args2(2).Name = "CharFontName.CharSet"
	args2(2).Value = -1
	args2(3).Name = "CharFontName.Family"
	args2(3).Value = 5
	args2(4).Name = "CharFontName.FamilyName"
	args2(4).Value = "DejaVu Sans Mono"
	
	x = Array("aa","bb","cc")
	For i = 0 To Ubound(x())
		k = k & x(i) & CHR(13)
	Next i
	
	x = StarDesktop.loadComponentFromURL ("private:factory/swriter","_blank", 0, arg())
	x.Text.String = LEFT(k, LEN(k)-1)
	ccf = x.CurrentController.Frame
	With createUnoService("com.sun.star.frame.DispatchHelper")
		.executeDispatch(ccf, ".uno:SelectAll", "", 0, Array())
		.executeDispatch(ccf, ".uno:CharFontName", "", 0, args2())
		.executeDispatch(ccf, ".uno:Copy", "", 0, Array())
	End With

	x.close(true)
End Sub
Mein Problem:

VBA-Code:

Code: Alles auswählen
la_ab(li_abzeile) = " | Rechnungsbetrag " & string(42," ") & "| " & ls_repr & " |"
Mein Problem ist, das er beim reinkopieren dieses Zwischenablagetextets in unterschiedliche Tools (Notepad, Thunderbird, hier in Forumbeitrag) die string(42," ") weglässt. CHR$(32) geht auch nicht. Nach Notepad klappts!
Ich habe keine Ahnung was Du damit meinst.


Gruß
Stephan

Postbyme
***
Beiträge: 63
Registriert: Mo, 27.11.2017 18:42

Re: Daten aus Array nach Zwischenablage entladen

Beitrag von Postbyme » Sa, 09.11.2019 21:41

Hi,
a) ein Array wird mit unterschiedlichen Textzeilen gefüllt um eine Auftragsbestätigung für Thunderbird zusammenzubauen
Alle Textzeilen werden schön formatiert damit letztendlich alle Zeilen zu den Überschriften passen. Deshalb auch eine nichtproportionale Schriftart.
Eine Textzeile davon wäre z.B.

Code: Alles auswählen

x(li_abzeile) = " | Rechnungsbetrag " & string(42," ") & "| " & ls_repr & " |"
b) dann wird das Array in die Zwischenablage entladen (mithilfe deiner Lösungen)
c) dann wird mit Strg+V dieser Text in eine Thunderbirdmail eingefügt und sieht dann so aus:
| Rechnungsbetrag | 25,49 EUR | (aber Mist die 42 Blanks fehlen nach dem Wort Rechnungsbetrag)

mache ich STRG+V in Notepad dann funktioniert das dagegen korrekt so:
| Rechnungsbetrag ……………………………………….. | 25,49 EUR |

Hatte gedacht, wenn ich den Text schon als nicht proportional in der Zwischenablage habe (deine 2. Lösung) dann ist der Fehler behoben aber ich glaube das ist kein Problem von LO sondern hier muss ich in Thunderbird suchen. Auf jeden Fall vielen Dank für deine Lösungen, habe jetzt auch verstanden wie das mit den Texteigenschaften funktioniert.

Gruß
Wini
Zuletzt geändert von Postbyme am Sa, 09.11.2019 22:20, insgesamt 1-mal geändert.
-------------------------------------------------------
Windows 10 1903 /Libre Office 6.3.3.2 (x64)

Benutzeravatar
Faol
****
Beiträge: 146
Registriert: Di, 26.01.2016 21:18

Re: Daten aus Array nach Zwischenablage entladen

Beitrag von Faol » Sa, 09.11.2019 22:10

Hallo Wini,
Wini hat geschrieben:aber Mist die 42 Blanks fehlen nach dem Wort Rechnungsbetrag)
Frage aus Interesse?
Funktionieren keine Tabulatoren, statt der Leerzeichen?

Code: Alles auswählen

x(li_abzeile) = " | Rechnungsbetrag " & chr(9) & chr(9) & chr(9) & "| " & ls_repr & " |"
Gruß
Faol
⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒
Win.10 Prof. (x64) • AOO 4.1.6 • LibO 6.3.2.2 (x64)
⇐⇐⇐⇐⇐⇐⇐⇐⇐⇐⇐⇐⇐⇐⇐⇐⇐⇐⇐⇐⇐⇐⇐⇐⇐⇐⇐⇐⇐⇐⇐

Stephan
********
Beiträge: 11286
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: Daten aus Array nach Zwischenablage entladen

Beitrag von Stephan » Sa, 09.11.2019 22:26

aber ich glaube das ist kein Problem von LO sondern hier muss ich in Thunderbird suchen
Hier ist ein Hinweis auf den Bug:
https://www.thunderbird-mail.de/forum/t ... -verloren/

mir ist allerdings der Status der dortigen Bugmeldung nicht ganz klar:
https://bugzilla.mozilla.org/show_bug.cgi?id=1174452

mir scheint der Bug wurde gefixt, aber es gibt dort den Hinweis auf einen Regressionsbug:
https://bugzilla.mozilla.org/show_bug.cgi?id=1568313

Bei Letzterem ist mir nur nicht klar warum der als REgressionsbug gilt, denn die FEhlerbeschreibung ist inhaltlich, meine Meinung nach, eine Andere.


Gruß
Stephan

Postbyme
***
Beiträge: 63
Registriert: Mo, 27.11.2017 18:42

Re: Daten aus Array nach Zwischenablage entladen

Beitrag von Postbyme » Sa, 09.11.2019 22:29

Hallo,
nach einem schnellen Test mit Tabulator würde ich sagen "nein".
-------------------------------------------------------
Windows 10 1903 /Libre Office 6.3.3.2 (x64)

Postbyme
***
Beiträge: 63
Registriert: Mo, 27.11.2017 18:42

Re: Daten aus Array nach Zwischenablage entladen

Beitrag von Postbyme » Sa, 09.11.2019 22:34

Ja, das wäre der Bug, oje. Werde die Sache auch einmal nachverfolgen.
-------------------------------------------------------
Windows 10 1903 /Libre Office 6.3.3.2 (x64)

Benutzeravatar
Faol
****
Beiträge: 146
Registriert: Di, 26.01.2016 21:18

Re: Daten aus Array nach Zwischenablage entladen

Beitrag von Faol » Sa, 09.11.2019 22:40

Hallo Wini,

vielleicht geht es mit einer anderen Syntax.
z.B.:

Code: Alles auswählen

x(li_abzeile) = " | Rechnungsbetrag " & String(chr(9)) & "| " & ls_repr & " |"
oder auch:

Code: Alles auswählen

REM 2 Tabulatoren setzen
x(li_abzeile) = " | Rechnungsbetrag " & String(chr(9)) & String(chr(9)) & "| " & ls_repr & " |"
Gruß
Faol
⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒
Win.10 Prof. (x64) • AOO 4.1.6 • LibO 6.3.2.2 (x64)
⇐⇐⇐⇐⇐⇐⇐⇐⇐⇐⇐⇐⇐⇐⇐⇐⇐⇐⇐⇐⇐⇐⇐⇐⇐⇐⇐⇐⇐⇐⇐

Postbyme
***
Beiträge: 63
Registriert: Mo, 27.11.2017 18:42

Re: Daten aus Array nach Zwischenablage entladen

Beitrag von Postbyme » So, 10.11.2019 12:15

Hallo,
nein, mit Tabulator klappt auch nicht.
Parallel habe ich mein Problem in einem Thunderbird-Forum aufgemacht und da schon eine Lösung bekommen. Mit Shift+Verfassen :shock: wird eine Mail als html oder Reintext (noch Fragen offen) eröffnet und das reinkopieren erfolgt dann schön "mit Blanks".
Gruß
Winni
-------------------------------------------------------
Windows 10 1903 /Libre Office 6.3.3.2 (x64)

Antworten