Zum Beispiel:
- Messung - Beginn: 17.08.2025 14:59:27
Messung - Ende: 18.08.2025 19:21:00
erstes Ereignis: 15:00 Uhr
Wiederholung: alle 6 Stunden
Mir fehlt grad jeglicher Formelansatz, vermutlich lässt sich das nur als Makro lösen?
Danke - Stefan
Code: Alles auswählen
=LET( a; OBERGRENZE(A6-1/8;1/4)+1/8 ; e; UNTERGRENZE(B6+1/8;1/4)-1/8 ; WENN(e<a ; 0 ; 1+(e-a)*4))
Code: Alles auswählen
#NAME?
Code: Alles auswählen
import datetime as dt
def count_steps():
start_datetime = "11.08.2025 13:14:45"
stop_datetime = "12.08.2025 13:19:21"
start_time = "15:00"
step = 6 # Dauer zwischen jeder Wiederholung in Stunden
sum_steps = 0
start_date = start_datetime[:11]
start_step = dt.datetime.strptime(f"{start_date} {start_time}","%d.%m.%Y %H:%M")
stop = dt.datetime.strptime(stop_datetime,"%d.%m.%Y %H:%M:%S")
delta = dt.timedelta(hours=step)
while start_step < stop:
start_step += delta
sum_steps += 1
print(start_step)
print(sum_steps)
if __name__ == "__main__":
count_steps()
das kann jetzt daran liegen:StefKe hat geschrieben: ↑Mi 20. Aug 2025, 10:23Hallo, bei der Formel streikt Calc -Code: Alles auswählen
#NAME?
Das funktioniert aber nur für die beiden im Code hart-codierten Daten, das geht schon besser, unter der Voraussetzung das du zuerst den Zellbereich mit den Start- und Enddatum und einer leeren Spalte daneben für die Ergebnisse selektierstStefKe hat geschrieben: ↑Mi 20. Aug 2025, 10:23habe das jetzt so gelöst:passt auch - Danke für Deine MüheCode: Alles auswählen
import datetime as dt def count_steps(): start_datetime = "11.08.2025 13:14:45" stop_datetime = "12.08.2025 13:19:21" start_time = "15:00" step = 6 # Dauer zwischen jeder Wiederholung in Stunden sum_steps = 0 start_date = start_datetime[:11] start_step = dt.datetime.strptime(f"{start_date} {start_time}","%d.%m.%Y %H:%M") stop = dt.datetime.strptime(stop_datetime,"%d.%m.%Y %H:%M:%S") delta = dt.timedelta(hours=step) while start_step < stop: start_step += delta sum_steps += 1 print(start_step) print(sum_steps) if __name__ == "__main__": count_steps()
Stefan
Code: Alles auswählen
from datetime import datetime as dt, timedelta as delta
LO_EPOCH = dt(1899, 12, 30)
SECS_PER_DAY = 24*60*60
def py_date(lo_date):
lo_date, lo_time = divmod(lo_date, 1)
_seconds = lo_time * SECS_PER_DAY
h_m, _seconds = divmod(_seconds, 60)
_hours, _minutes = divmod(h_m, 60)
return LO_EPOCH + delta(days=lo_date, hours=_hours,
minutes=_minutes, seconds=_seconds)
def count_events( start, end, events):
for hour in events:
if start < (first:=start.replace(hour=hour,minute=0,second=0)):
first = first
break
c = 0
while first < end:
first+=delta(hours=6)
c+=1
return c
def main():
doc = XSCRIPTCONTEXT.getDocument()
sel = doc.CurrentSelection
data = sel.DataArray
dates = [row[:2] for row in data]
events = [3, 9, 15, 21]
sel.DataArray = [( a, e, count_events(py_date(a), py_date(e), events))
for a, e in dates]
Code: Alles auswählen
def py_date(lo_date):
return LO_EPOCH + delta(days=lo_date)
Code: Alles auswählen
_datetime
Code: Alles auswählen
datetime