使用Python在Outlook子日历文件夹创建约会触发AttributeError报错
错误原因
CreateItem是Outlook.Application实例的专属方法,你获取到的calendar变量是子日历文件夹(Folder)对象,该对象本身没有CreateItem方法,因此调用时会抛出AttributeError异常。
解决方案
你已经正确获取到了目标子日历对象,只需要修改创建新条目的逻辑即可,以下是两种可用实现方式:
方式一:直接在目标日历创建(更推荐)
调用目标日历文件夹的Items.Add方法直接创建对应类型的条目,不需要额外移动操作:
import win32com.client outlook = win32com.client.Dispatch('Outlook.Application').GetNamespace('MAPI') # 这部分获取子日历的逻辑和你的原有代码完全一致 calendar = outlook.Folders('myaccount@mail.com').Folders('calendar').Folders('subcalendar') # 修改创建新条目的代码,使用Items.Add方法 newapp = calendar.Items.Add(win32com.client.constants.olAppointmentItem) newapp.Start = '2020-09-25 08:00' newapp.Subject = 'Testentry' newapp.Duration = 15 newapp.Save()
方式二:创建后移动到目标日历
先通过Application实例创建默认位置的约会条目,再调用Move方法移动到目标子日历:
import win32com.client outlook_app = win32com.client.Dispatch('Outlook.Application') outlook = outlook_app.GetNamespace('MAPI') calendar = outlook.Folders('myaccount@mail.com').Folders('calendar').Folders('subcalendar') # 先在默认位置创建约会 newapp = outlook_app.CreateItem(win32com.client.constants.olAppointmentItem) newapp.Start = '2020-09-25 08:00' newapp.Subject = 'Testentry' newapp.Duration = 15 # 移动到目标子日历,移动操作会自动保存条目,无需额外调用Save newapp.Move(calendar)
内容的提问来源于stack exchange,提问作者Maurice Ender
相关产品推荐
相关产品推荐

