如何用Python检查Outlook会议室可用性及解析FreeBusy输出?
解答你的Outlook会议室可用性检查疑问
我来帮你逐个理清这些关于Outlook FreeBusy API的问题,结合你现有的代码来看:
问题1:第一个字符是否代表00:00-00:30,输出对应整月?
没错!你调用的FreeBusy(pywintypeDate,30,True)里,第三个参数CompleteFormat=True会让API返回**pywintypeDate所在月份的完整月历忙闲信息**。每个字符对应第二个参数指定的30分钟时段,第一个字符就是该月第一天的00:00-00:30时段。字符串里的数字含义固定:
0:空闲1:暂定占用2:忙碌3:外出
问题2:能否仅获取指定单日的可用性?
当然可以!只需要调整CompleteFormat参数为False,同时确保起始时间是你要查询当天的00:00。这样API会返回从起始时间开始的48个字符(刚好对应24小时,每个字符30分钟),也就是完整的单日忙闲数据。修改你的代码片段如下:
import win32com.client import datetime import pywintypes oOutlook = win32com.client.Dispatch("Outlook.Application") appt = oOutlook.CreateItem(1) appt.Start = '2018-05-18 13:30' appt.Subject = 'Follow Up Meeting' appt.Duration = 30 appt.Location = '<name of meeting room>' appt.MeetingStatus = 1 myRecipient = appt.Recipients.Add("<mail id of meeting room>") # 注意这里要加括号,且方法首字母大写 myRecipient.Resolve() my_date = datetime.date(2018,5,18) # 设置起始时间为当天00:00 pywintypeDate = pywintypes.Time(datetime.datetime.combine(my_date, datetime.time.min)) # 第三个参数改为False,获取单日数据 availabilityInfo = myRecipient.FreeBusy(pywintypeDate,30,False) # 截取前48个字符,就是当天的所有时段 daily_availability = availabilityInfo[:48] print(daily_availability)
问题3:是否需要解析输出以检查特定时段的可用性?
是的,你需要通过计算目标时段对应的字符索引来判断是否空闲。举个例子,你要检查13:30-14:00的可用性:
- 计算该时段相对于当天00:00的分钟数:
13*60 +30 = 810分钟 - 除以每个时段的长度30分钟:
810//30 =27,得到字符索引为27(索引从0开始) - 查看
daily_availability[27]的值,如果是0就代表该时段空闲
对应的代码示例:
target_start = datetime.datetime(2018,5,18,13,30) # 计算当天已过的分钟数 minutes_since_midnight = (target_start - datetime.datetime.combine(my_date, datetime.time.min)).total_seconds()//60 # 计算目标时段对应的字符索引 slot_index = int(minutes_since_midnight //30) # 检查是否空闲 if daily_availability[slot_index] == '0': print("该时段空闲,可以预订!") else: print("该时段忙碌,需要更换时段")
另外提醒下,你的原代码里myRecipient.resolve少了括号,且方法名首字母应该大写为Resolve(),否则收件人可能无法正确解析,会影响FreeBusy的查询结果。
内容的提问来源于stack exchange,提问作者avinashse
相关产品推荐
相关产品推荐

