Direkte Berechnung im Textfeld

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

Moderator: Moderatoren

juetho
******
Beiträge: 617
Registriert: Di, 20.04.2010 15:46
Wohnort: Berlin

Re: Direkte Berechnung im Textfeld

Beitrag von juetho »

Schwierig. Dazu musst du dir einen eigenen Parser schreiben, der den eingegebenen Text analysiert: Wenn er mit dem Gleichheitszeichen beginnt, muss der String aufgeteilt werden in Teiltext1 - Rechenzeichen - Teiltext2 (möglicherweise noch weitere Rechenzeichen und Klammern, je nachdem wie weit du das treiben willst). Am einfachsten dürfte es noch mit regulären Ausdrücken gehen; suche im Forum nach SearchDescriptor. Jürgen
Situation: LibO 3.6 auf Win 7 Home Premium (64-bit) mit MySQL (localhost) über JDBC
Stephan
********
Beiträge: 12368
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: Direkte Berechnung im Textfeld

Beitrag von Stephan »

Gibt es da eine Möglichkeit?
Da ich nicht genau weiß wie man =5-3 mittels com.sun.star.sheet.FunctionAccess nutzt, würde ich die Formel einfach eingebettet in die Summenfunktion (sinngemäß also =SUMME(5-3)) mittels com.sun.star.sheet.FunctionAccess nutzen, siehe:
http://www.dannenhoefer.de/faqstarbasic ... enden.html


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

Re: Direkte Berechnung im Textfeld

Beitrag von Karolus »

Stephan hat geschrieben:
Gibt es da eine Möglichkeit?
Da ich nicht genau weiß wie man =5-3 mittels com.sun.star.sheet.FunctionAccess nutzt, würde ich die Formel einfach eingebettet in die Summenfunktion (sinngemäß also =SUMME(5-3)) mittels com.sun.star.sheet.FunctionAccess nutzen, siehe:
http://www.dannenhoefer.de/faqstarbasic ... enden.html
Ich kann mir nicht vorstellen das das funktioniert - Calc parst und evaluiert '5-3' bevor das Ergebnis an die SUMMEn-funktion weitergereicht wird ?!

@jo
in Basic werden die Argumente nicht mit ;semicolon getrennt, sondern mit ,komma.

In Python wäre

Code: Alles auswählen

eval( ausdruck ) 
möglich, (quick an dirty - weil das alles tut was ins Textfeld in gültiger Python-syntax eingetragen wird)





Karolus
Zuletzt geändert von Karolus am Mi, 19.12.2012 10:08, insgesamt 2-mal geändert.
LO7.4.7.2 debian 12(bookworm) auf Raspberry5 8GB (ARM64)
LO25.2.3.2 flatpak debian 12(bookworm) auf Raspberry5 8GB (ARM64)
juetho
******
Beiträge: 617
Registriert: Di, 20.04.2010 15:46
Wohnort: Berlin

Re: Direkte Berechnung im Textfeld

Beitrag von juetho »

jo1234 hat geschrieben:b = mid("Hallo";2;2)
(war zum testen)
Jetzt bekomme ich einen Syntaxfehler "Fehler in Klammerschachtelung".
Das sieht eher nach einer verwirrenden Fehlermeldung aus. Nach meiner Hilfe werden die Parameter bei MID mit Komma, nicht mit Semikolon getrennt. Jürgen
Situation: LibO 3.6 auf Win 7 Home Premium (64-bit) mit MySQL (localhost) über JDBC
Stephan
********
Beiträge: 12368
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: Direkte Berechnung im Textfeld

Beitrag von Stephan »

Ich kann mir nicht vorstellen das das funktioniert - Calc parst und evaluiert '5-3' bevor das Ergebnis an die SUMMEn-funktion weitergereicht wird ?!
Der Einwand ist berechtigt.

Meine Antwort ging davon aus das man nicht wissen kann wie komplex die REchenausdrücke werden, in jedem Fall aber nur gültige Operatoren (+,-,*,/,^) vorliegenund man somit nur das "=" abtrennen muß, also immer nur das erste ZEichen links vom Gesamtausdruck und den verbleibenden Ausdruck dann an die SUMME-Funktion übergeben kann.

Wenn ich das jetzt kurz prüfe sehe ich das das so leider tatsächlich nicht geht.

Ein möglicher workaround, unter Beachtung dessen das es nur um gültige (also auch in Basic selbst gültige) Operatoren ginge wäre mittels Makro zur Laufzeit ein neues Makro zu erzeugen (ungefähr gemäß: http://www.dannenhoefer.de/faqstarbasic ... schen.html) was den Ausdruck (z.B. =5-3) als REchenschritt enthält und dieses anschließend auszuführen. Ich kann nur momentan nicht sagen ob das im selben Dokument ginge ohne Neuladen.
Man könnte jedoch unter Windows ein VBS zur Laufzeit erzeugen und ausführen und daher das Ergebnis gewinnen.



Gruß
Stephan
Antworten