Ответ 1
Отсюда мне нужна помощь в прокрутке событий и их чтении.
В принципе, все, что вам нужно сделать, это следовать документации COM API от Microsoft. Например, метод Restrict()
возвращает объекты AppointmentItem
, которые задокументированы в AppointmentItem Object для Outlook 2010. Таким образом, начиная с папки, вы можете получить и перечислить назначения:
# Get the AppointmentItem objects
# http://msdn.microsoft.com/en-us/library/office/aa210899(v=office.11).aspx
appointments = someFolder.Items
# Restrict to items in the next 30 days (using Python 3.3 - might be slightly different for 2.7)
begin = datetime.date.today()
end = begin + datetime.timedelta(days = 30);
restriction = "[Start] >= '" + begin.strftime("%m/%d/%Y") + "' AND [End] <= '" +end.strftime("%m/%d/%Y") + "'"
restrictedItems = appointments.Restrict(restriction)
# Iterate through restricted AppointmentItems and print them
for appointmentItem in restrictedItems:
print("{0} Start: {1}, End: {2}, Organizer: {3}".format(
appointmentItem.Subject, appointmentItem.Start,
appointmentItem.End, appointmentItem.Organizer))
Обратите внимание, что мне пришлось использовать немного другой формат времени для выражения ограничения ("%m/%d/%Y"
вместо "%m%d%Y"
). Правильным решением будет использование функции Outlook Format
, как описано в http://msdn.microsoft.com/en-us/library/office/ff869597(v=office.14).aspx, в разделе Дата. Также обратите внимание, что я использовал Python 3.3, поэтому для создания дат вам придется использовать разные функции. В любом случае, для целей тестирования вы можете использовать жестко закодированное выражение, например "[Start] >= '02/03/2014' AND [End] <= '03/05/2014'"
Чтобы получить общий календарь, должен работать следующий код: это обычная последовательность, найденная в документации API, однако я не смог ее заставить работать, но это может быть связано с другим сервером (не используя сервер Exchange):
recipient = namespace.createRecipient("User Name")
resolved = recipient.Resolve()
sharedCalendar = namespace.GetSharedDefaultFolder(recipient, 9)
Чтобы показать все доступные папки как дерево, вы можете использовать что-то вроде
def folderTree(folders, indent = 0):
prefix = ' ' * (indent*2)
i = 0
for folder in folders:
print("{0}{1}. {2} ({3})".format(prefix, i, folder.Name, folder.DefaultItemType))
folderTree(folder.Folders, indent + 1)
i = i + 1
...
folderTree(namespace.Folders)
Чтобы найти папку по ее пути (например, чтобы найти папку календаря "[email protected]" ниже папки "Интернет-календари" ), вы можете использовать что-то вроде
def findFolder(folders, searchPath, level = 0):
for folder in folders:
if folder.Name == searchPath[level]:
if level < len(searchPath)-1:
# Search sub folder
folder = findFolder(folder.folders, searchPath, level+1)
return folder
return None
...
sharedCalendar = findFolder(namespace.Folders, ["Internet Calendars", "[email protected]"])
См. также:
- Ссылка на объектную модель Outlook
- Несколько примеров использования COM API (как часть моего проекта "Примеры Python" )
- Автономный Python script, чтобы показать дерево папок и папки поиска по имени пути