aus -> oZelle.Value

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

Moderator: Moderatoren

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

aus -> oZelle.Value

Beitrag von ulko38 »

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: 3466
Registriert: Mo, 28.02.2011 17:49

Re: aus -> oZelle.Value

Beitrag von F3K Total »

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) 3554 mal betrachtet
Dann könntest du den Wert tatsächlich mit

Code: Alles auswählen

oZelle.Value
auslesen.


Gruß R

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

Re: aus -> oZelle.Value

Beitrag von Toxitom »

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: 29
Registriert: Do, 01.12.2016 10:56

Re: aus -> oZelle.Value

Beitrag von ulko38 »

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) 3522 mal betrachtet

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

Re: aus -> oZelle.Value

Beitrag von Toxitom »

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: 29
Registriert: Do, 01.12.2016 10:56

Re: aus -> oZelle.Value

Beitrag von ulko38 »

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) 2717 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: 3676
Registriert: Di, 12.08.2003 18:07
Wohnort: Wiesbaden
Kontaktdaten:

Re: aus -> oZelle.Value

Beitrag von Toxitom »

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: 29
Registriert: Do, 01.12.2016 10:56

Re: aus -> oZelle.Value

Beitrag von ulko38 »

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) 2696 mal betrachtet

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

Re: aus -> oZelle.Value

Beitrag von Toxitom »

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: 29
Registriert: Do, 01.12.2016 10:56

Re: aus -> oZelle.Value

Beitrag von ulko38 »

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

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

Re: aus -> oZelle.Value

Beitrag von ulko38 »

Hi,
zwischen den Tagen möchte ich auch mal was für mich tun.
Scheitere nun aber daran, dass ich nicht weiss wie ich von einer benannten Zahl, z.B. 25 km/h die 4 Buchstaben abtrennen kann
um dann damit rechnen zu können.
Denn 25,6 km/h / 3,6 funktioniert so nicht.
Grüße Ulrich

mikeleb
******
Beiträge: 914
Registriert: Fr, 09.12.2011 16:50

Re: aus -> oZelle.Value

Beitrag von mikeleb »

Hallo,
25 km/h ist keine benannte Zahl, sondern ein Text.
Innerhalb eines Makros wandelt dir die Funktion val()

Code: Alles auswählen

val("25 km/h")
den Text in eine Zahl.
Gruß,
mikeleb

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

Re: aus -> oZelle.Value

Beitrag von ulko38 »

Hi emkelep,

Hab ich auch gedacht. Aber oZelle.Type gibt mir =(2) zurück.
Und in der Formatierung von Libre Calc wird nur Dezimalzahl angezeigt. Noch nicht mal Finanz-Zahl (Währung)
Grüße Ulrich

mikeleb
******
Beiträge: 914
Registriert: Fr, 09.12.2011 16:50

Re: aus -> oZelle.Value

Beitrag von mikeleb »

Hallo,
was liefert denn oZelle.Value bzw. oZelle.String?
Gruß,
mikeleb

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

Re: aus -> oZelle.Value

Beitrag von ulko38 »

hi mikeleb,

oZelle.Type = 2 nach "tannenhoefer" ist das eine Zahl mit Komma.
oZelle.Value = 0
oZelle.String = FALSE

Rechnen kann ich leider damit nicht.
Die GPX-Datei wurde mit "Routeconverter" nach CSV-Datei gewandelt und mit Libre Office Calc geöffnet.
Daten diser Spalte will ich zum 1.-mal zum rechnen ( km --> m/s) verwenden.
Grüße Ulrich
2019-12-29 Speet.PNG
2019-12-29 Speet.PNG (27.96 KiB) 1908 mal betrachtet

Antworten