aus -> oZelle.Value

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

Moderator: Moderatoren

ulko38
**
Beiträge: 22
Registriert: Do, 01.12.2016 10:56

aus -> oZelle.Value

Beitrag von ulko38 » Mi, 04.12.2019 14:14

Hi,

Ich möchte aus einer als Zahl formatierten Zelle aus dem Inhalt = "53.104731N"
nur die Zahlen in die Variable übernehmen.
nLat = 0
nLat = TEIL((oZelle.Value);1;9)
bei der schrittweisen Ausführung wird diese Zeile imer angemeckert "Klammern falsch gesetzt".
Wie muss ich die Zelle ansprechen um den richtigen Wert "53.104731" zu bekommen

Danke schon mal und Grüße ulko

F3K Total
********
Beiträge: 3404
Registriert: Mo, 28.02.2011 17:49

Re: aus -> oZelle.Value

Beitrag von F3K Total » Mi, 04.12.2019 15:47

So?

Code: Alles auswählen

oLat = cdbl(Replace(Left(oZelle.String,9),".",","))
D.h. du nimmst die ersten 9 Zeichen des Textes, esetzt den Punkt durch ein Komma und wandelst den sich ergebenden Text dann in eine Double-Zahl um.
Du könntest den Text allerdings beim Import direkt in eine Zahl umwandeln, sähe etwa so aus:
TIS.png
TIS.png (53.55 KiB) 1142 mal betrachtet
Dann könntest du den Wert tatsächlich mit

Code: Alles auswählen

oZelle.Value
auslesen.


Gruß R

Toxitom
********
Beiträge: 3639
Registriert: Di, 12.08.2003 18:07
Wohnort: Wiesbaden
Kontaktdaten:

Re: aus -> oZelle.Value

Beitrag von Toxitom » Mi, 04.12.2019 16:05

Hey Ulko,

na, da mu
sust Du erst mal einiges erläutern;)
Ich möchte aus einer als Zahl formatierten Zelle aus dem Inhalt = "53.104731N"....
Also, in der Annahme, dass Dein LO/AOO mit deutscher Lokalisierung läuft: Ein Zelle in Calc als "Zahl" formatiert kann den dargestellten Inhalt nicht aufnehmen ! Das ist dann immer ein Text. Erkennbar an dem Punkt sowie dem "N" - beides nichtgültige Zeichen bei Zahlen.

Der Inhalt der Zelle ist also keine Zahl (value) sondern ein "text" (string). Die Foratierung der Zelle spielt dabei im Übrigen keine Rolle (hinsichtlich des Inhalts).

weiter:
nLat = 0
nLat = TEIL((oZelle.Value);1;9)
die Variable nLt erhält zunächst den Wert "0" - wird also intern zu einer Integer-Varaiblen.
Dann rufst Du "Teil()" auf. Was soll das sein? "Teil()" ist eine Calc-Funktion (Deutsche Übersetzung) und funktioniert vielleicht im Claczellen - nicht aber in einem Makro-Programm, zumindest so nicht ;)

Im Übrigen liefert auch "Teil" nur ein String zurück, keinen Wert, und verarbeitet nur strings.

Also, wenn Du ne Zahl (Wert) aus der Zelle zurück haben willst, da musst Du andere Strategien entwickeln.

oZelle.string liefert dir den angezeigten Text der Zelle. Wäre hier richtig. Du kannst auch oZelle.getFormula() wählen, wenn keine Formel in der Zelle steht (dann wird auch der inhalt als String zurückgeliefert.

Den TExt kannst Du dann z.B. mit MID() bearbeiten :
sZellinhalt2 = mid(oZelle.string,1,9)

Beachte dabei: Kommas statt Semikolons.

Nun hättest Du immer noch einen Text (string) - mit dem kannst Du nicht rechnen. Jetzt müsstest Du den Punkt ersetzen mit einem Komma (falls das der Dezimal-Trenner sein sollte und dann die String-Zahl in einen Wert umwandeln:
sZellinhalt2 = replace(sZellinhalt2, ".", ",")
nLat = cDbl(sZellinhalt2)

jetzt würde in der Variablen nLat der Wert 53,104731 stehen, mit dem Du Rechenoperationen durchführen kannst.

Aber ich glaube, Dir fehlen erst einmal Grundkenntnisse der Makro/Basic Programmierung. Arbeite Dich langsam und schrittweise ein :)

VG
Tom

Edit:
F3K hat das treffend in einer Zeile zusammengefasst ;))
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic

ulko38
**
Beiträge: 22
Registriert: Do, 01.12.2016 10:56

Re: aus -> oZelle.Value

Beitrag von ulko38 » Mi, 04.12.2019 18:10

Hi und R,
Danke vorab über die schnellen antworten und Vorschläge.
Werde mit beiden einen Versuch Starten.
"Anfänger, ja und zwar ein Totaler. Da wird sich wohl mit meinem Alter (81)leider nichts mehr ändern.
Trotzdem bin ich mit meinem bisherigen Erfolg shr zu frieden.
Hab euch mal ein screenshott bezüglich der Formate gemacht: von wg. Format

posting.php?mode=reply&f=18&t=73813#tabs
Format A1 auch Zahl.

Grüße ulko
Dateianhänge
Ausschn. TCalc-Tabelle.PNG
Ausschn. TCalc-Tabelle.PNG (97.93 KiB) 1110 mal betrachtet

Toxitom
********
Beiträge: 3639
Registriert: Di, 12.08.2003 18:07
Wohnort: Wiesbaden
Kontaktdaten:

Re: aus -> oZelle.Value

Beitrag von Toxitom » Mi, 04.12.2019 18:23

Hey Ulko,

na, das Alter spielt doch keine Rolle :)) Man ist so jung und fit, wie man sich fühlt... hihi

Zurück zum Thema: Statt mit Makros kannst Du das aber auch direkt mit Formeln lösen:
=WERT(WECHSELN(WECHSELN(A1;"N";"");".";","))


Das schreibst Du in die Zielzelle, A1 wäre dann die Zelle mit dem Ausgangswert. Die Formel kannst Du wie in Calc üblich nach unten "ziehen" - und hast so ne ganze Spalte.

brauchste die Werte später ohne Formel: Spalte kopieren - und nur Werte einfügen. Fertig.

VG
Tom
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic

ulko38
**
Beiträge: 22
Registriert: Do, 01.12.2016 10:56

Re: aus -> oZelle.Value

Beitrag von ulko38 » So, 08.12.2019 17:01

Hi,
vorab nochmals Danke für Eure Hinweise. Die Entvernungsberechnung zwischen zwei geografischen Punkten ( aufgenommen mit Daten-Logger *.gpx)nach der Formel von kompf.de steht.
Nun habe ich Probleme mit der Diff.-Zeit-Berechnung. Wobei mich nur die sek zwischen zwei Punken interessieren. Damit kann ich bei Bedarf über v=m/s die fehlenden Diff.-zeiten ermitteln.
Nunzu meiner Frage:
nMenu, nSek.PNG
nMenu, nSek.PNG (73.85 KiB) 305 mal betrachtet
Oberhalb der Funktion MINUTE(nDif_Zeit) bzw SEKUNDE(nDif_Zeit) wird hinter Print die Zahl7,633888888888897E-04 angezeigt.
Minut leuf sauber durchmit 1 min, währen SEKUNDE(ZAHL) hängen bleibt.

Kann da jemand helfen.
Danke und Grüße ulko

Toxitom
********
Beiträge: 3639
Registriert: Di, 12.08.2003 18:07
Wohnort: Wiesbaden
Kontaktdaten:

Re: aus -> oZelle.Value

Beitrag von Toxitom » So, 08.12.2019 17:44

Hey Ulko,

na, die Fehlermeldung sagt Dir doch eigentlich alles;)) "Funktion nicht definiert" - also: die Funktion "SEKUNDE", die Du aufrufst, existiert nicht. Hast Du sicher gar nicht definiert.

Wahrscheinlich wolltest Du auch gar keine eigen Funktion schreiben, sondern meintest die eingebaute Funktion "Second" ? Dann hast Du das halt einfach falsch geschrieben;)

VG
Tom
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic

ulko38
**
Beiträge: 22
Registriert: Do, 01.12.2016 10:56

Re: aus -> oZelle.Value

Beitrag von ulko38 » So, 08.12.2019 18:33

Hi,
Danke für die schnelleantwort.
Ich hab mir schon so was gedacht, aber nachdem die Minute() geklappt hat und ich nichts anderes gefunden habe. Jetzt in der List "englisch - Deutsch" sehe ich es auch.

download/file.php?mode=view&id=17735

DummeNnachläßigkeit von mir.

Wie schreibt man eigendlich "eigene" Funktionen ??
Noch einen schönen Rest-zweiten-Advend. ulko
Dateianhänge
Sekunde.PNG
Sekunde.PNG (43.58 KiB) 284 mal betrachtet

Toxitom
********
Beiträge: 3639
Registriert: Di, 12.08.2003 18:07
Wohnort: Wiesbaden
Kontaktdaten:

Re: aus -> oZelle.Value

Beitrag von Toxitom » So, 08.12.2019 19:35

Hallo Ulko,

ich zitiere mal aus meinem eigenen Post (Antwort):
..."Teil()" ist eine Calc-Funktion (Deutsche Übersetzung) und funktioniert vielleicht im Calczellen - nicht aber in einem Makro-Programm, zumindest so nicht ...
Nochmal: Calc-Funktionen (also das, was Du inder Zelle eingeben kannst ) und Basic-Funktionen im Makro sind zwei völlig unterschiedliche Dinge! Du schreibst Basic-Makros - also solltest Du Dich mit den vordefinierten und eingebauten Basic-Funktionen beschäftigen. Da gibt es z.B. eine Gruppe zur Datumsbehandlung - und dort findest Du unter anderem solche Funktionen wie "Year()", "Day()", "hour()", "minute()" und eben auch "Second()".

Und das hat alles nix mit der Liste (deutsch - englisch) zu tun. Dein Bild zeigt die Calc-Funktion! Völlig falscher Ansatz.

Besorge Dir ein Buch oder Nachschalgewerk für AOO/LO Basic Programmierung - oder die Online-Versionen bzf PDFs, die frei verfügbar sind.. ud arbeite mit denen:)

Da findest Du dann auch Antworten auf die Frage: "Wie schreibt man eigendlich "eigene" Funktionen ??"

Machste doch eigentlich schon... sonst liefe Dein Makro ja nicht.

Alle "Sub XXX .... end sub" oder "Function XXX.... end function" sind ja selbst geschrieben Funktionen :)

VG
Tom
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic

ulko38
**
Beiträge: 22
Registriert: Do, 01.12.2016 10:56

Re: aus -> oZelle.Value

Beitrag von ulko38 » Heute 11:38

Hi Tom
Ok und Danke.
Deine Erklärung habe ich verstanden. Erspart mir viel sucherei.
Grüße ulko

Antworten