下载重复约会,但所有约会的开始日期显示相同日期
我正在尝试用Python和win32com从客户的Outlook中获取所有的约会。在日历A中,有几个重复的约会。但是,当我通过Python下载这些重复的约会时,它只显示了第一个约会的开始日期,而不是每个不同的日期。
我在代码中使用了IncludeRecurrences = True;我该如何修改我的Python代码呢?谢谢。
举个例子:一个每个月的第一天都会发生的重复约会在2024年。我想显示12个实例,每个实例有12个不同的开始日期(比如01/01/2024,02/01/2024,等等),但现在只显示了01/01/2024,并且重复了12次。
import win32com.client, datetime
import time
import os
import email
import imaplib
import pandas as pd
import xlsxwriter
import datetime as dt
import calendar as ccc
from datetime import timedelta
MailboxToAccess = "my_mail@outlook.com"
outlook = win32com.client.Dispatch('Outlook.Application').GetNamespace('MAPI')
recip = outlook.CreateRecipient(MailboxToAccess)
mail_box = outlook.Folders["A_mailbox"]
calendar = mail_box.Folders["Calendar"].Items
calendar.IncludeRecurrences = True
calendar.Sort('[Start]')
_today=datetime.date.today()[enter image description here](https://i.stack.imgur.com/kdnV3.png)
first_day = datetime.date(_today.year, _today.month, 1)
this_month_end = datetime.datetime(_today.year, _today.month, ccc.monthrange(_today.year, _today.month)[1])
restriction = "[Start] >= '" + str(first_day) + "' AND [END] <= '" + str(this_month_end) + "'"
print (restriction)
calendar = calendar.Restrict(restriction)
1 个回答
0
首先,如果你在Outlook中使用共享日历,你需要用到一个叫做 GetSharedDefaultFolder 的方法。这种情况通常是一个用户把自己的一些默认文件夹(比如共享的日历文件夹)访问权限委托给另一个用户。在这种情况下,你就不需要在代码中使用字符串常量了。
mail_box = outlook.Folders["A_mailbox"]
calendar = mail_box.Folders["Calendar"]
另外,注意以下代码,它重新分配了 calendar
对象:
calendar = calendar.Restrict(restriction)
Restrict
方法会返回一个新的 Items
实例,这个实例是经过过滤后的结果。把两个对象分开是有意义的,这样后面使用时可以更清楚地区分它们。
最后,在这个代码示例中,结果集合是如何进一步使用的并不清楚。你可以参考我十多年前为技术博客写的文章,可能会对你有帮助,见 如何在Outlook中使用Restrict方法获取日历项目。