我需要帮助来循环遍历这些事件并读取它们。
基本上,您只需遵循 Microsoft 的 COM API 文档即可。例如,Restrict()
方法返回的是在 Outlook 2010 的 AppointmentItem Object 中有详细说明的 AppointmentItem
对象。因此,从一个文件夹开始,您可以按以下方式获取和列出约会:
appointments = someFolder.Items
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)
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文档中所述,
Date部分。还请注意,我使用的是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)
要按路径查找文件夹(例如,在“Internet Calendars”文件夹下找到名为“Norfeld@so.com”的日历文件夹),您可以使用类似以下的内容:
def findFolder(folders, searchPath, level = 0):
for folder in folders:
if folder.Name == searchPath[level]:
if level < len(searchPath)-1:
folder = findFolder(folder.folders, searchPath, level+1)
return folder
return None
...
sharedCalendar = findFolder(namespace.Folders, ["Internet Calendars", "Norfeld@so.com"])
另请参阅:
ns.GetDefaultFolder(9)
而不是namespace.
?如果我使用你的代码,会出现 NameError 错误。 - alexwlchan