Fortlaufende, sich selbst aktualisierende Zeit
Moderator: Moderatoren
Fortlaufende, sich selbst aktualisierende Zeit
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
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
-
- *******
- Beiträge: 1763
- Registriert: Di, 03.10.2006 18:05
Re: Fortlaufende, sich selbst aktualisierende Zeit
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
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
Win7_64 / LO_4.4.5.2
Re: Fortlaufende, sich selbst aktualisierende Zeit
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
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
Re: Fortlaufende, sich selbst aktualisierende Zeit
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
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
Re: Fortlaufende, sich selbst aktualisierende Zeit
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
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
Re: Fortlaufende, sich selbst aktualisierende Zeit
Hallo
Gut das du dazuschreibst: "im Rahmen von Flugsimulation " anderenfalls hätte ich darüber nachgedacht noch jemals in einen Flieger zu steigen.
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.
Gruß Karo
Gut das du dazuschreibst: "im Rahmen von Flugsimulation " anderenfalls hätte ich darüber nachgedacht noch jemals in einen Flieger zu steigen.

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
AOO4, LO4.3, LO4.4 LinuxMint17.2
Re: Fortlaufende, sich selbst aktualisierende Zeit
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
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
Re: Fortlaufende, sich selbst aktualisierende Zeit
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
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
Re: Fortlaufende, sich selbst aktualisierende Zeit
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
Alex
Re: Fortlaufende, sich selbst aktualisierende Zeit
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
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
-
- *******
- Beiträge: 1763
- Registriert: Di, 03.10.2006 18:05
Re: Fortlaufende, sich selbst aktualisierende Zeit
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
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
Win7_64 / LO_4.4.5.2
Re: Fortlaufende, sich selbst aktualisierende Zeit
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.
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) 188-mal heruntergeladen