下载重复约会,但所有约会的开始日期显示相同日期

0 投票
1 回答
42 浏览
提问于 2025-04-14 18:31

我正在尝试用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方法获取日历项目

撰写回答