Daten aus Array nach Zwischenablage entladen

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

Moderator: Moderatoren

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

Daten aus Array nach Zwischenablage entladen

Beitrag von Postbyme »

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 11 22H2 /Libre Office 7.3.6.2 (x64)
Stephan
********
Beiträge: 12369
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: Daten aus Array nach Zwischenablage entladen

Beitrag von Stephan »

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: 90
Registriert: Mo, 27.11.2017 18:42

Re: Daten aus Array nach Zwischenablage entladen

Beitrag von Postbyme »

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

Winni
-------------------------------------------------------
Windows 11 22H2 /Libre Office 7.3.6.2 (x64)
Postbyme
***
Beiträge: 90
Registriert: Mo, 27.11.2017 18:42

Re: Daten aus Array nach Zwischenablage entladen

Beitrag von Postbyme »

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 11 22H2 /Libre Office 7.3.6.2 (x64)
Stephan
********
Beiträge: 12369
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: Daten aus Array nach Zwischenablage entladen

Beitrag von Stephan »

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: 90
Registriert: Mo, 27.11.2017 18:42

Re: Daten aus Array nach Zwischenablage entladen

Beitrag von Postbyme »

ja, so klappt es. Super!
Danke
-------------------------------------------------------
Windows 11 22H2 /Libre Office 7.3.6.2 (x64)
Postbyme
***
Beiträge: 90
Registriert: Mo, 27.11.2017 18:42

Re: Daten aus Array nach Zwischenablage entladen

Beitrag von Postbyme »

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 11 22H2 /Libre Office 7.3.6.2 (x64)
Stephan
********
Beiträge: 12369
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: Daten aus Array nach Zwischenablage entladen

Beitrag von Stephan »

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: 90
Registriert: Mo, 27.11.2017 18:42

Re: Daten aus Array nach Zwischenablage entladen

Beitrag von Postbyme »

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 11 22H2 /Libre Office 7.3.6.2 (x64)
Stephan
********
Beiträge: 12369
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: Daten aus Array nach Zwischenablage entladen

Beitrag von Stephan »

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: 90
Registriert: Mo, 27.11.2017 18:42

Re: Daten aus Array nach Zwischenablage entladen

Beitrag von Postbyme »

Hallo,
nach einem schnellen Test mit Tabulator würde ich sagen "nein".
-------------------------------------------------------
Windows 11 22H2 /Libre Office 7.3.6.2 (x64)
Postbyme
***
Beiträge: 90
Registriert: Mo, 27.11.2017 18:42

Re: Daten aus Array nach Zwischenablage entladen

Beitrag von Postbyme »

Ja, das wäre der Bug, oje. Werde die Sache auch einmal nachverfolgen.
-------------------------------------------------------
Windows 11 22H2 /Libre Office 7.3.6.2 (x64)
Postbyme
***
Beiträge: 90
Registriert: Mo, 27.11.2017 18:42

Re: Daten aus Array nach Zwischenablage entladen

Beitrag von Postbyme »

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 11 22H2 /Libre Office 7.3.6.2 (x64)
Postbyme
***
Beiträge: 90
Registriert: Mo, 27.11.2017 18:42

Re: Daten aus Array nach Zwischenablage entladen

Beitrag von Postbyme »

Ich werde jetzt wahrscheinlich die Auftragsbestätigung ohne Tabelle aufbauen. Habe gegoogelt und viele Kommentare warnen vor einer unkorrekten / verschobenen Darstellung beim Empfänger.
Ggf. werde ich noch später ein PDF dazu hängen - hier aus LO generiert 8) .
-------------------------------------------------------
Windows 11 22H2 /Libre Office 7.3.6.2 (x64)
Postbyme
***
Beiträge: 90
Registriert: Mo, 27.11.2017 18:42

Re: Daten aus Array nach Zwischenablage entladen

Beitrag von Postbyme »

Hallo Stephan,
a)wenn ich entsprechend deinem Programmbaustein ein Arrayelement als bold machen wollte dann müsste ich wie vorgehen?
Geht das als Eigenschaft von CharFontName oder muss ich da .executeDispatch(ccf,".uno:Bold","",0,args3()) machen.
Wie lauten dann die Einträge für .Name und .Value?
Natürlich muss ich die fetten und nicht fetten Arrayelement getrennt behandeln und zum Schluss wieder zusammensetzen.

b) Gibt es tiefergehende Informationen zu den folgenden Uno-"Dingsbums oder Services????" und wie Name und value belegt werden können?
.uno:CharFontName
.uno:FontHeight
.uno:Grow
.uno:Shrink
.uno:Bold
.uno:Italic
.uno:Underline
.uno:Strikeout
.uno:SuperScript
.uno:SubScript
.uno:Color
.uno:BackColor

.uno:LeftPara
.uno:CenterPara
.uno:RightPara
.uno:JustifyPara
.uno:LineSpacing
.uno:Spacing
.uno:ParaspaceIncrease
.uno:ParaspaceDecrease
.uno:IncrementIndent
.uno:DecrementIndent

Danke
Gruß
Winni
-------------------------------------------------------
Windows 11 22H2 /Libre Office 7.3.6.2 (x64)
Antworten