Outlook-Termine für Zeitraum filtern

Alles, was nicht direkt mit Python-Problemen zu tun hat. Dies ist auch der perfekte Platz für Jobangebote.
Antworten
2weizen
User
Beiträge: 16
Registriert: Freitag 12. Dezember 2008, 20:32

Sonntag 8. Februar 2009, 16:51

Hallo zusammen,

ich möchte mit einem Python-Programm Termine aus einem Outlook-Kalender auslesen um damit Statistiken zu erstellen. Zugriff auf den Kalender und das Auslesen klappt schon, nur mit dem Filtern habe ich noch ein Problem. Mehrtägige Termine, die vor dem Filterzeitraum beginnen oder nach dem Filterzeitraum enden, werden nicht beachtet.
Als Beispiel habe ich folgende Termine:

20.02.2009 12:00 - 27.02.2009 12:00 Termin1
27.02.2009 12:00 - 28.02.2009 12:00 Termin2
28.02.2009 - 29.02.2009 (Ganztägig) Termin3

Wenn ich jetzt vom 21.02.2009 00:00 bis 28.02.2009 23:59 Filter, wird nur Termin2 ausgegeben.
Ich möchte aber auch die Termine Termin1 und Termin3 mit gelistet bekommen, da sie ja zumindest Teilweise in diesen Zeitraum fallen.

Kann mir bei diesem Problem jemand weiterhelfen?

Und hier noch mein Testcode:

Code: Alles auswählen

import win32com.client

outlook = win32com.client.Dispatch("Outlook.Application")
mbx = outlook.Session.Folders.item("Outlook")
fldrs = mbx.Folders
fldr = fldrs.GetFirst()
while fldr.Name <> "Kalender":
  fldr = fldrs.GetNext()
ns = outlook.GetNamespace("MAPI")
appts = ns.GetFolderFromID(fldr.EntryID).Items
appts.Sort("[Start]")
appts.IncludeRecurrences = True

rule = '[Start] >= "21.02.2009 00:00" AND [End] <= "28.02.2009 23:59"'
appts = appts.Restrict(rule)

appt = appts.GetFirst()
while appt <> None:
  s = appt.Subject
  l = appt.Location
  print appt.Start, appt.End, s.encode("cp850"),"(",l.encode("cp850"),")"
  appt = appts.GetNext()
  
lunar

Sonntag 8. Februar 2009, 17:55

Überdenke deine Filterregel. Ich kenne mich zwar mit Outlook nicht aus, aber rein intuitiv würde ich mal vermuten, dass du das "AND" durch ein "OR" ersetzen musst ...

Außerdem solltest du "appts not is None" im Schleifenkopf verwenden.
2weizen
User
Beiträge: 16
Registriert: Freitag 12. Dezember 2008, 20:32

Sonntag 8. Februar 2009, 18:19

Wenn ich OR verwende, werden alle Termine gelistet, auch jene außerhalb des gewählten Zeitraumes.
Über die Filterregel grübel ich schon ne ganz Weile. Ein Gedanke ist, jeden Tag einzeln abzufragen (sowas wie GetAppointmentsForDay(date)). Nur habe ich noch keine passende Funktion gefunden.

Das mit schleifenkopf ist gut. Liest sich auch besser. Muss bloß "is not None" lauten.
EyDu
User
Beiträge: 4871
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Sonntag 8. Februar 2009, 18:20

Ich weiß nicht, ob die Syntax so stimmt, aber ich vermute, dass du so etwas suchst:

Code: Alles auswählen

'([End] >= "21.02.2009 00:00" AND [End] <= "28.02.2009 23:59") OR ([Start] >= "21.02.2009 00:00" AND [Start] <= "28.02.2009 23:59")'
Das sollte alle Termine ausgeben, die sich mit dem gegebenen Zeitraum schneiden: Wenn also das Ende eines Termins im Intervall liegt oder auch der Anfang.

Code: Alles auswählen

     |----------Zeitfenster----------|
|-----1-----|                     |------2------|
Das Leben ist wie ein Tennisball.
2weizen
User
Beiträge: 16
Registriert: Freitag 12. Dezember 2008, 20:32

Sonntag 8. Februar 2009, 19:40

Super! :) Danke EyDu, das ist die Formel die mir weiterhilft.
Antworten