Calc: Befehl >Round< in Makros
Moderator: Moderatoren
Calc: Befehl >Round< in Makros
Liebe Leute,
sehe ich das richtig, dass in der Makrosprache Basic der Befehl >Round< nicht zur Verfügung steht? Wenn ja möchte ich fragen, ob jemand eine entsprechende Prozedur schon mal geschrieben hat und gegebenenfalls bereit wäre diese zur Verfügung zu stellen.
Schon mal Danke
Gruß Markus
Moderation,4: verschoben in BASIC-Unterbereich, wo alle Makro-Fragen hin gehören; Betreff angepasst
sehe ich das richtig, dass in der Makrosprache Basic der Befehl >Round< nicht zur Verfügung steht? Wenn ja möchte ich fragen, ob jemand eine entsprechende Prozedur schon mal geschrieben hat und gegebenenfalls bereit wäre diese zur Verfügung zu stellen.
Schon mal Danke
Gruß Markus
Moderation,4: verschoben in BASIC-Unterbereich, wo alle Makro-Fragen hin gehören; Betreff angepasst
- komma4
- ********
- Beiträge: 5332
- Registriert: Mi, 03.05.2006 23:29
- Wohnort: Chon Buri Thailand Asia
- Kontaktdaten:
Re: Calc: Befehl >Round< in Makros
Cheers
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
Re: Befehl >Round< in Makros
Hallo Markus,
Guckst Du auch mal: Wie kann man Funktionen von Calc verwenden?
Man kann das aber auch so schreiben:
Gruß
Jürgen
Wie kommst Du darauf?Shirkan hat geschrieben:sehe ich das richtig, dass in der Makrosprache Basic der Befehl >Round< nicht zur Verfügung steht?
Guckst Du auch mal: Wie kann man Funktionen von Calc verwenden?
Man kann das aber auch so schreiben:
Code: Alles auswählen
oFunctionAccess = createUnoService( "com.sun.star.sheet.FunctionAccess")
iNumber = 12.46
iCount = 1
result = oFunctionAccess.callFunction( "ROUND", array(iNumber, iCount))
print result
Jürgen
Software hat keinen Verstand - benutze deinen eigenen...!
Win 7 SP1/ LibreOffice 3.4.2 OOO340m1 (Build:203) / Firefox 15.0.1 / Notebook ASUS K70IO 64 Bit-Betriebssytem
Win 7 SP1/ LibreOffice 3.4.2 OOO340m1 (Build:203) / Firefox 15.0.1 / Notebook ASUS K70IO 64 Bit-Betriebssytem
Re: Calc: Befehl >Round< in Makros
Hallo DPunch
Oder?
Jürgen
Schöne Lösung. Aber, es war nicht die Frage gestellt wie man einen Zahl runden kann, sondern wie man mit der Funktion "Round" eine Zahl rundet.DPunch hat geschrieben:Viel einfacher:
Code: Alles auswählen
i = 12.35
MsgBox CInt(i)

Ausserdem kann man mit Deiner Lösung nicht beeinflussen zu welcher Stelle gerundet wird.Shirkan hat geschrieben:dass in der Makrosprache Basic der Befehl >Round< nicht zur Verfügung steht?

Jürgen
Software hat keinen Verstand - benutze deinen eigenen...!
Win 7 SP1/ LibreOffice 3.4.2 OOO340m1 (Build:203) / Firefox 15.0.1 / Notebook ASUS K70IO 64 Bit-Betriebssytem
Win 7 SP1/ LibreOffice 3.4.2 OOO340m1 (Build:203) / Firefox 15.0.1 / Notebook ASUS K70IO 64 Bit-Betriebssytem
Re: Calc: Befehl >Round< in Makros
eigentlich nicht, denn DEin Codevorschlag rundet nur auf Ganzzahlen, was nicht identisch ist mit der Funktionalität der Funktion ROUND (Tabellenfunktion) die hier wohl eher gefragt war.Viel einfacher:
Gruß
Stephan
Re: Calc: Befehl >Round< in Makros
Aloha
Asche auf mein Haupt, ich war tatsächlich nur vom Runden auf Ganzzahlen ausgegangen.
Prinzipiell kann man die Typkonvertierung natürlich trotzdem wunderbar dafür nutzen, wobei der FunctionAccess sicherlich die "globalere" Variante ist.
Asche auf mein Haupt, ich war tatsächlich nur vom Runden auf Ganzzahlen ausgegangen.
Prinzipiell kann man die Typkonvertierung natürlich trotzdem wunderbar dafür nutzen, wobei der FunctionAccess sicherlich die "globalere" Variante ist.
Code: Alles auswählen
Function Round(ByVal nNumber as Double, nCount as Integer)
nNumber = CInt(nNumber * 10^nCount)
Round = nNumber * 10^-nCount
End Function
Re: Calc: Befehl >Round< in Makros
dass müßtest Du erklären.wobei der FunctionAccess sicherlich die "globalere" Variante ist
Nach meiner Erfahrung ist ein direkter ZUgriff über Basic, wie Du ihn hier vorschlägst, universeller.
Praxisbeispiel aus meiner jüngsten beruflichen Tätigkeit ist dabei ein 'OOo-Großkunde' der sein Office selbst angepasst kompiliert und dabei TEile der API 'abschaltet', was zwar im Kónkreten nicht das Beispiel betrifft über das wir hier reden was aber eigentlich andeutet das Programmierungen die sich nur auf den Sprachinhalt von Basic beschränken 'globaler' (robuster/universeller) sind.
Gruß
Stephan
Re: Calc: Befehl >Round< in Makros
Für den normalen Anwender in dem Sinne 'globaler', dass ein Makro immer darauf zugreifen kann, wohingegen eine eigene Funktion stets mitgeschleppt werden müsste, entweder in allen relevanten Dokumenten oder eben in Form einer Extension.Stephan hat geschrieben:dass müßtest Du erklären.
Natürlich gibt es da Ausnahmen und ich denke es ist auch wahrscheinlicher, dass eine solche Funktion in 10 Jahren noch gaargenau dasselbe tut, ob der FunctionAccess andererseits in 10 Jahren auch immer noch genauso aufgerufen wird, steht da eher in den Sternen.
Globaler also absolut nicht im Sinne von robuster, sondern was die Verfügbarkeit für normale Anwender betrifft.
Re: Calc: Befehl >Round< in Makros
ja, verstehe (und erlaube mir trotzdem Deine Lösung für die etwas Bessere zu halten)
Weil es ja hier nur um 2 Zeilen Code ginge die 'mitgeschleppt werden müßten und dafür erheblich an 'Langzeitsicherheit' gewonnen wäre, wie du es selbst andeutest:
In Praxis ist das auch eine Kostenfrage, denn ein paar Zeilen Code zu kopieren kostet wenig, irgendwann hunderte Makros ändern zu müssen, bei häufig nicht sauberer modularer Implementierung, kostet sehr viel.
Ich persönlich verwende aus leidlicher Erfahrung z.B. nie irgendwelche Rückgriffe auf Funktionen in den OOo-Bibliotheken, sondern schreibe das nötigenfalls nochmals als Kopie in die Makros.
Weil es ja hier nur um 2 Zeilen Code ginge die 'mitgeschleppt werden müßten und dafür erheblich an 'Langzeitsicherheit' gewonnen wäre, wie du es selbst andeutest:
wahrscheinlicher, dass eine solche Funktion in 10 Jahren noch gaargenau dasselbe tut, ob der FunctionAccess andererseits in 10 Jahren auch immer noch genauso aufgerufen wird, steht da eher in den Sternen.
In Praxis ist das auch eine Kostenfrage, denn ein paar Zeilen Code zu kopieren kostet wenig, irgendwann hunderte Makros ändern zu müssen, bei häufig nicht sauberer modularer Implementierung, kostet sehr viel.
Ich persönlich verwende aus leidlicher Erfahrung z.B. nie irgendwelche Rückgriffe auf Funktionen in den OOo-Bibliotheken, sondern schreibe das nötigenfalls nochmals als Kopie in die Makros.
Re: Calc: Befehl >Round< in Makros
das geht bei großen Zahlen nicht.. leider.DPunch hat geschrieben:Code: Alles auswählen
Function Round(ByVal nNumber as Double, nCount as Integer) nNumber = CInt(nNumber * 10^nCount) Round = nNumber * 10^-nCount End Function
globale acces round geht glaube ich schon, ist aber ziemlich langsam, und wie vorher gesagt, nicht so sicher.
genau so könnte man FORMAT benutzen (format(zahl, #.###) ) ist aber auch langsam und man muss auch gut die ROUND Funktion damit zuerst schreiben.
Also mit Format könnte man ziemlich unabhängige ROUND Funktion schreiben, die auch 1000 stellige zahlen runden kann.