Fortlaufende, sich selbst aktualisierende Zeit

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

Moderator: Moderatoren

AlexCohrs

Fortlaufende, sich selbst aktualisierende Zeit

Beitrag von AlexCohrs » Mi, 09.12.2009 08:45

Liebe Experten,

ich möchte in meinem Tabellendokument gerne die fortlaufende, aktuelle Zeit in eine Zelle eintragen. Also nicht die JETZT()-Funktion, die man ja manuell aktualiseren muss, sondern eine Art Digitaluhr innerhalb meines Dokuments. Ich habe die Suchfunktion hier benutzt und Google, bin aber nicht weitergekommen.

Für Excel habe ich ein passendes Makro gefunden, das geht aber in OpenOffice nicht. Und vor allem sollte ich vielleicht dazu sagen, dass ich von Makros überhaupt keine Ahnung habe - Ihr bräuchtet also ein bisschen Geduld mit mir.

Könnt Ihr mir weiterhelfen?

Vielen Dank!

Alex



_________________
Moderation: Thema geteilt und von Setup und Allgemeines nach OOo Basic und Java verschoben.—lorbass, Moderator

Gert Seler
*******
Beiträge: 1763
Registriert: Di, 03.10.2006 18:05

Re: Fortlaufende, sich selbst aktualisierende Zeit

Beitrag von Gert Seler » Mi, 09.12.2009 09:52

Hallo Alex,
zeigt Dein "Betriebssystem" keine Uhrzeit an? Mein "MS-XP" stellt das automatisch in die "Fußleiste".
Vielleicht funktioniert das auch bei Deinem "BS".

Sonst geht es nur über "Ooo_Basic-Schiene" anderes Forum siehe "Forenübersicht".

mfg
Gert
Es gibt nichts gutes, außer man tut es.
Win7_64 / LO_4.4.5.2

AlexCohrs

Re: Fortlaufende, sich selbst aktualisierende Zeit

Beitrag von AlexCohrs » Mi, 09.12.2009 12:00

Hallo Gert,

danke für die schnelle Antwort! Ich brauche die fortlaufende Uhrzeit schon in einer Zelle, weil ich damit rechnen möchte. Insofern ist es wohl wirklich ein Fall für das andere Forum.

@Mods: Mögt Ihr den Beitrag dorthin verschieben - oder soll ich lieber noch mal neu posten?
Verschoben. Lieber NICHT nochmal posten. :D —lorbass, Moderator

Alex

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

Re: Fortlaufende, sich selbst aktualisierende Zeit

Beitrag von Karolus » Mi, 09.12.2009 12:09

Hallo
Was genau willst du denn rechnen?
=JETZT() wird sich stets von selber aktualisieren, sobald du irgendwo in der Tabelle eine Änderung vornimmst.

Gruß Karo
AOO4, LO4.3, LO4.4 LinuxMint17.2

AlexCohrs

Re: Fortlaufende, sich selbst aktualisierende Zeit

Beitrag von AlexCohrs » Mi, 09.12.2009 14:15

Ach, die Rechnung selbst ist nichts wildes. Ich möchte lediglich eine Warnung ausgeben, wenn die aktuelle Lokalzeit größer ist als eine andere, selbst eingetragene Zeit. Außerdem soll ausgegeben werden, wie groß der Unterschied aktuell ist.

Das Ganze gehört zu einem etwas größeren Projekt im Rahmen von Flugsimulation. Wenn ich mal eben ausholen darf: Es gibt ja Bereiche der Erde, die nicht von Radar abgedeckt sind. Hier arbeiten die Fluglotsen mit Positionsangaben der Piloten. Mein Excel-Sheet gibt anhand der gemeldeten Daten automatisch Warnungen aus, wenn beispielsweise zwei Flugzeuge auf der gleichen Luftstraße in der gleichen Flughöhe unterwegs sind. Oder wenn mehrere Piloten gemeldet haben, dass sie innerhalb einer bestimmten Zeitspanne am gleichen Punkt sein werden. Das alles funktioniert auch schon prima.

Zusätzlich würde ich nun gerne noch diese Funktion einfügen: Bei diesen Positionsangaben meldet der Pilot auch, wann er den nächsten Wegpunkt überfliegen wird. Sagen wir mal 21:30. Diese Uhrzeit gebe ich in meine Tabelle ein. Wenn dieser Zeitpunkt überschritten ist (ohne dass der Pilot sich wieder gemeldet hat) soll die Tabelle oben genannte Warnung ausgeben und die schon verstrichene Verzögerungszeit ausgeben. Damit kann der Lotse dann abschätzen, ob er nicht vielleicht mal nachfragen sollte, ob noch alles in Ordnung ist.

Im Grunde geht das durchaus mit der JETZT()-Funktion, zur Not würde ich darauf zurückgreifen. Allerdings wird man bei der Nutzung nicht permanent an der Tabelle arbeiten, sondern sie eher beobachten. Von daher aktualisiert sich die Zeit auch nicht so häufig, wie es mir lieb wäre. Daher die Idee, eine aktuelle, fortlaufende Digitaluhr in einer Zelle zu haben.

Wie gesagt: Für Excel habe ich dafür ein funktionierendes Makro gefunden: http://www.office-hilfe.com/support/top ... uegen.html (siehe 5. und 7. Posting). In OpenOffice und auch in NeoOffice scheint das gleiche Makro aber nicht zu gehen - oder ich bin schlicht zu blöd dafür. Wie gesagt: Mit Makros kenne ich mich nicht aus - ich wundere mich schon, dass ich Excel/OO Calc in Teilen überhaupt kapiere :-)

Viele Grüße

Alex

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

Re: Fortlaufende, sich selbst aktualisierende Zeit

Beitrag von Karolus » Mi, 09.12.2009 15:14

Hallo
Gut das du dazuschreibst: "im Rahmen von Flugsimulation " anderenfalls hätte ich darüber nachgedacht noch jemals in einen Flieger zu steigen. :shock:

Ich hab quick & dirty die Aktion "neu berechnen" aufgezeichnet und in eine 'do ... loop' -schleife gesteckt, ausserdem wird das Makro noch abgebrochen falls der Wert in A1 der ersten Tabelle 1 beträgt.
Das kann man sicher auch noch eleganter lösen, hab ich aber gerade keine Lust dazu.

Code: Alles auswählen

sub Neu_berechnen 

dim document   as object
dim dispatcher as object
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

do until thiscomponent.sheets(0).getcellbyposition(0,0).value = 1 'Abruchbedingung A1 = 1
	dispatcher.executeDispatch(document, ".uno:Calculate", "", 0, Array())
	wait 10000  'Wartezeit 10 Sekunden
loop

end sub
Gruß Karo
AOO4, LO4.3, LO4.4 LinuxMint17.2

AlexCohrs

Re: Fortlaufende, sich selbst aktualisierende Zeit

Beitrag von AlexCohrs » Mi, 09.12.2009 15:39

Ah cool! Das ist natürlich eine super Idee, sich lieber mit der automatischen Neuberechnung der Tabelle zu befassen, anstatt wie ich immer nur an eine Uhrzeitfunktion zu denken. Vielen, vielen Dank!

Es ist mir nach der tollen Hilfe sehr unangenehm, noch so etwas blödes zu fragen, aber wie gesagt habe ich keine Ahnung von Makros. Sehe ich es richtig, dass ich unter Extras/Makros/Makros bearbeiten dieses Makro in dem Baumverzeichnis unterhalb meines eigenen Dokuments anlege (nicht im Hauptverzeichnis, oder? Ich brauche es ja nur für dieses Dokument...) und dann abspeichere? Muss ich sonst noch was machen? Oder funktioniert es dann gleich automatisch?

Viele Grüße

Alex

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

Re: Fortlaufende, sich selbst aktualisierende Zeit

Beitrag von Karolus » Mi, 09.12.2009 15:59

Hallo
Genau so, erstelle ein neues Modul 'unterhalb' des Dokuments und kopiere den Quelltext in das per 'Bearbeiten' geöffnete Modul.
Starten kannst du es über den grünen Pfeil im Basicfenster oder auch über -->Extras-->Makros-->BasicMakros...'Ausführen'
oder auch per Tastatushortcut ( -->Extras--Anpassen--Tastatur )

Gruß Karo
AOO4, LO4.3, LO4.4 LinuxMint17.2

AlexCohrs

Re: Fortlaufende, sich selbst aktualisierende Zeit

Beitrag von AlexCohrs » Mi, 09.12.2009 16:41

Ah super, vielen Dank für die ausführliche Erklärung. Wenn ich das Dokument dann weitergebe, muss ich den Nutzer dann vermutlich darauf hinweisen, dass und wie er das Makro ausführt, oder?

Alex

AlexCohrs

Re: Fortlaufende, sich selbst aktualisierende Zeit

Beitrag von AlexCohrs » Fr, 11.12.2009 11:53

Mir ist gerade übrigens noch etwas aufgefallen, das eigentlich total banal ist, aber vielleicht dem ein oder anderen noch weiterhelfen kann:

Ich wollte ja die aktuelle Zeit via JETZT() mit einer fest eingegebenen Zeit vergleichen. Das hat nicht richtig funktioniert, und ich habe mir das Hirn zermartert, warum das nicht geht. Dabei ist es total einfach...

Wenn man - wie ich eher zufällig - die Uhrzeit mal als Dezimalzahl ausgibt, dann sieht man, dass JETZT() nicht nur die Uhrzeitbeinhaltet, sondern auch das Datum - selbst wenn es nicht ausgegeben wird. Damit ist zum Beispiel 11:40 Uhr in Dezimalzahlen nicht 0,45 wie es zu erwarten wäre - sondern 40158,45. Deshalb kann man eine fest eingegebene Zeit, bei der dann wirklich 0,45 stehen würde, nicht anständig mit =JETZT() vergleichen. Die Lösung: Wer das machen will, muss statt =JETZT() einfach nur =JETZT()-HEUTE() verwenden.

Wie gesagt, total banal und die meisten hier lachen darüber sicher - aber zumindest mir hat es viel Kopfzerbrechen bereitet. Vielleicht hilft es daher auch anderen...

Alex

Gert Seler
*******
Beiträge: 1763
Registriert: Di, 03.10.2006 18:05

Re: Fortlaufende, sich selbst aktualisierende Zeit

Beitrag von Gert Seler » Fr, 11.12.2009 16:22

Hallo Alex,
die Zahl 40158,45 besagt, das seit dem 30-12-1899(Referenz_Datum) 40158Tage vergangen sind. Da 1Tag=24Std. beinhaltet, ergibt die
Uhrzeit 11:40 die DezZahl 0,486 vom Tag. Die Uhrzeit 12:00 ist der halbe Tag (0,5 ); 8:00 =0,333..;16:00=0,666.. usw.



Weitere Erklärungen zur Berechnung von Datum & Zeit findest Du hier:
http://www.ooowiki.de/CalcFunktionenDat ... tumUndZeit

mfg
Gert
Es gibt nichts gutes, außer man tut es.
Win7_64 / LO_4.4.5.2

Uli2222
Beiträge: 3
Registriert: So, 01.06.2014 15:46

Re: Fortlaufende, sich selbst aktualisierende Zeit

Beitrag von Uli2222 » Fr, 20.06.2014 10:07

Ich hatte dieses Problem auch, dass ich eine laufende Uhr in einem Calc-Dokument gebraucht habe und nicht wollte, dass ständig Zellneuberechnungen durchgeführt werden.
Dann bin ich darauf gekommen, einen Trigger einzuführen. Die Triggerzelle des Uhrenblatts springt jede Sekunde (Wait 1000) von 0 nach 1 und wieder zurück.
Damit Calc gezwungen wird, die Displayzelle bei Veränderung des Triggers neu zu berechnen, stelle ich sie mit der Verkettenfunktion dar und füge einen leeren String ("") aus der Platzhalterzelle hinzu. Diese wiederum wird abhängig vom Wert der Triggerzelle immer neu berechnet (bleibt aber immer "").
Damit die Uhr immer wieder geeicht wird und nicht falschläuft, gibt es eine zweite Schleife die mittels des Calculate Befehle alle 50 Durchläufe (frei einstellbar) die Uhr mit der Systemzeit synchronisiert.
Um das Makro zu stoppen habe ich noch einen Unterbrecher eingeführt
Damit das Dokument nicht unter laufendem Makro beendet/gespeichert wird, sollte man das 2. Makro (s.u) an die entsprechenden Ereignisse knüpfen.

Code: Alles auswählen

sub Uhr
rem Variablen und Anfangsbedingungen setzten------
mydoc = thiscomponent
mySheet = myDoc.Sheets().getByName("Display")
trigger = mysheet.getCellRangeByName("$F$4") rem Triggerzelle
clockstop = mysheet.getCellRangeByName("$I$4") rem Unterbrecherzelle
clockstop.value=0 rem Unterbrecherzelle null setzen
rem ----------------------------------------------------------------------
    do rem äussere Schleife zur Zellenneuberechnung/Systemzeitabgleich (50 Durchläufe bis zur nächsten Sync)
        for i = 1 to 50 rem innere Schleife zur Zeittriggerung 
        if clockstop.value <> 0 Then exit do rem Stopbedingung abfragen
        trigger.value = 0 rem Trigger im Sekundentakt zwischen null und 1 springen lassen (Wait 1000 ist ca 1 sec)
        wait 1000
        trigger.value = 1
        wait 1000
        next i
    thiscomponent.calculate 
    loop
clockstop.value=0 rem Unterbrecher rücksetzen

end sub

sub alle_Markros_beenden
end 
end sub

Dateianhänge
Uhr.ods
(11.58 KiB) 169-mal heruntergeladen

Antworten