使用python从microsoft outlook检索忙/闲状态

时间:2013-11-26 16:44:16

标签: python calendar outlook

我正在尝试使用python语言从特定人员的outlook日历中检索忙/闲状态。

这是我的代码。

import win32com.client

obj_outlook = win32com.client.Dispatch('Outlook.Application')
obj_Namespace = obj_outlook.GetNamespace("MAPI")
obj_Recipient = obj_Namespace.CreateRecipient("someone@domain.com")
str_Free_Busy_Data = obj_Recipient.FreeBusy("11-11-2013", 11)
print str_Free_Busy_Data

但是我收到了一个错误:

Traceback (most recent call last):
  File "<pyshell#5>", line 1, in <module>
    str_Free_Busy_Data = obj_Recipient.FreeBusy("11-11-2013", 11)
  File "<COMObject CreateRecipient>", line 4, in FreeBusy
TypeError: an integer is required

所以我的问题是Recipient.FreeBusy()方法有两个必需参数,开始日期和持续时间。这里11是持续时间,它是一个整数。那么为什么python不能在这里识别整数参数并返回TypeError。

如果我做错了什么(请在python世界中我还是新手),请帮帮我。

提前致谢。

2 个答案:

答案 0 :(得分:2)

我在MSDN中查找了该方法。

http://msdn.microsoft.com/en-us/library/office/microsoft.office.interop.outlook.recipient.freebusy(v=office.12).aspx

该方法的语法有3个参数。

string FreeBusy(
DateTime Start,
int MinPerChar,
Object CompleteFormat

问题在于您将字符串传递给DateTime参数。相反,您需要在代码中导入日期时间库并使用日期参数。

所以,在你的代码开始时,试试这个。

import datetime

#Then declare the my_date variable as datetime.date.

my_date = datetime.date(2013,11,23)
str_Free_Busy_Data = obj_Recipient.FreeBusy(my_date, 11)

答案 1 :(得分:1)

FreeBusy的第一个参数是Date个对象。 Pywin不会将字符串转换为Date,但它可以转换pywintypes.Time对象,或者表示自Unix纪元以来秒数的整数。因此错误:当第一个参数被隐式转换为Time时,构造函数会抱怨它需要一个整数。

#start date: 12/31/1969 7:00:00 PM
str_Free_Busy_Data = obj_Recipient.FreeBusy(0, 11)

有很多方法可以从日期获取Unix时间戳。请参阅Convert python datetime to epoch with strftime