OOBasic Makro zum Formelerstellen

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

Moderator: Moderatoren

Karolus
********
Beiträge: 7517
Registriert: Mo, 02.01.2006 19:48

Re: OOBasic Makro zum Formelerstellen

Beitrag von Karolus »

Hallo
Dir fehlt im Prinzip die "enter-Taste" mit der eine Formeleingabe normalerweise abgeschlossen wird.
Die Aufgabenstellung kann aber gut mit aufgezeichnetem Dispatcher-code gelöst werden:

Code: Alles auswählen

sub Formel_in_alle_TabellenG10
' Recorded by Karo
' Date: Wed Jan 16 00:18:07 2008
	
	' get access to the document
	oDocumentModel = ThisComponent
	oDocumentView = oDocumentModel.getCurrentController()
	oDocumentFrame = oDocumentView.Frame

	' the dispatcher service is used to send commands from the 
	' document frame to the underlaying office application
	oDispatcher = CreateUnoService("com.sun.star.frame.DispatchHelper")
	
	oDispatcher.executeDispatch(oDocumentFrame, ".uno:TableSelectAll" ,"" ,0 ,Array())

	Dim mArgs1(0) As New com.sun.star.beans.PropertyValue
	mArgs1(0).Name = "ToPoint"
	mArgs1(0).Value = "$G$10"
	oDispatcher.executeDispatch(oDocumentFrame, ".uno:GoToCell" ,"" ,0 ,mArgs1())

	Dim mArgs2(0) As New com.sun.star.beans.PropertyValue
	mArgs2(0).Name = "StringName"
	mArgs2(0).Value = "=5*AUFRUNDEN(MAX(E10;F10)*1,2/5)"
	oDispatcher.executeDispatch(oDocumentFrame, ".uno:EnterString" ,"" ,0 ,mArgs2())
	
	Dim mArgs3(0) As New com.sun.star.beans.PropertyValue
	mArgs3(0).Name = "Tables"
	mArgs3(0).Value = Array(0)
	oDispatcher.executeDispatch(oDocumentFrame, ".uno:SelectTables" ,"" ,0 ,mArgs3()
end sub
Gruß Karo
LO7.4.7.2 debian 12(bookworm) auf Raspberry4b 8GB (64bit)
LO24.8.2.1 flatpak debian 12(bookworm) auf Raspberry4b 8GB (64bit)
Stephan
********
Beiträge: 12368
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: OOBasic Makro zum Formelerstellen

Beitrag von Stephan »

Das Unglück ist, daß OO nun manchmal #NAME? einträgt - und zwar obwohl die Formel OK ist.
Präzise: wenn man das Makro ausführt und dann in eine als #NAME? dargestellte Formel ein
Leerzeichen einfügt und wieder entfernt (also nichts ändert), funktioniert sie plötzlich.

Weiß jemand woran das liegt, und wie man es beheben kann?
grob geraten ist das ein Lokalisierungsproblem. Ein:

Code: Alles auswählen

doc.sheets(i).getcellbyposition(6,9).formula="=5*AUFRUNDEN(MAX(E10;F10) *1,2 / 5)"
sollte eigentlich garnicht funktionieren, weil Du einen deutschen Formelausdruck verwendest und der richtige Code dann sein sollte:

Code: Alles auswählen

doc.sheets(i).getcellbyposition(6,9).formulaLocal="=5*AUFRUNDEN(MAX(E10;F10) *1,2 / 5)"
was Du aber nur in einem deutschsprachigen OOo mit deutschen Zellformatierungen verwenden darst.

Sicher und universeller ist immer die sprachneutrale Variante, dann kümmert sich OOo automatisch um die Lokalisierung.
Du mußt dafür nun tatsächlich .formula verwenden, die Tabellenfunktion jedoch in englischer Lokalisierung angeben, also:

Code: Alles auswählen

doc.sheets(i).getcellbyposition(6,9).formula="=5*ROUNDUP(MAX(E10;F10) *1,2 / 5)"
keine Sorge, wenn DEin OOo deutsch ist erscheint die Formel in der Tabelle automatisch in deutsch auch wenn sie das Makro englisch einträgt.

Hinweis:
*das ich MAX belassen habe ist zufall weil das in englisch genauso heißt
*die englischen Funktionsnamen findest Du z.B. hier:
http://www.galileocomputing.de/1025 (unten auf der Seite unter Buch Updates)


Gruß
Stephan
Karolus
********
Beiträge: 7517
Registriert: Mo, 02.01.2006 19:48

Re: OOBasic Makro zum Formelerstellen

Beitrag von Karolus »

Hallo Stephan
Ich hatte auch zuerst an einen Eintrag in Englisch gedacht, hat aber das Problem nicht gelöst.

Gruß Karo

(getestet mit einem 4Wochen alten Dev-Shapshot)
LO7.4.7.2 debian 12(bookworm) auf Raspberry4b 8GB (64bit)
LO24.8.2.1 flatpak debian 12(bookworm) auf Raspberry4b 8GB (64bit)
Stephan
********
Beiträge: 12368
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: OOBasic Makro zum Formelerstellen

Beitrag von Stephan »

naja, ich sagte ja das meine Antwort grob geraten ist, nur ich las:
daß OO nun manchmal #NAME? einträgt

also tritt der FEhler nur manchmal auf, was ggf. dann nicht der Fall ist wenn die Ausdrücke in deutsch und englisch zufällig gleich sind ... wie auch immer, ich denke:

Code: Alles auswählen

doc.sheets(i).getcellbyposition(6,9).formula="=5*AUFRUNDEN(MAX(E10;F10) *1,2 / 5)"
ist in jedem Fall nicht in Ordnung, weil es das 'internationale' .formula mit einem deutschen Funktionseintrag kombiniert - ich habe jetzt nicht getestet wie sich OOo verhalten würde.




Gruß
Stephan
Karolus
********
Beiträge: 7517
Registriert: Mo, 02.01.2006 19:48

Re: OOBasic Makro zum Formelerstellen

Beitrag von Karolus »

Hallo Stephan
Du hast recht, es funktioniert mit dem englischen Eintrag, aber der Dezimaltrenner muss dann im Makro auch ein Punkt sein.
....
doc.sheets(i).getcellbyposition(6,9).formula="=5*ROUNDUP(MAX(E10;F10)*1.2/5)"
.....

Gruß Karo
LO7.4.7.2 debian 12(bookworm) auf Raspberry4b 8GB (64bit)
LO24.8.2.1 flatpak debian 12(bookworm) auf Raspberry4b 8GB (64bit)
Stephan
********
Beiträge: 12368
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: OOBasic Makro zum Formelerstellen

Beitrag von Stephan »

Hallo Karo,

stimmt, hast Du recht - mein Tag war schwer und ich bin heute etwas unkonzentriert, hab mich schon bei der PDF-Geschichte 'gequält' und bin nicht sicher ob mir da nicht auch noch ein Flüchtigkeitsfehler unterlaufen ist.


Gruß
Stephan
Antworten