想起来写个Outlook的Macro是因为年纪渐渐大,记忆力越来越不够用,于是考虑用艾宾浩斯记忆曲线来加强一下自己的记忆。跟之前写过的那些“复杂”的Excel Macro相比较,Outlook的Macro更具有挑战性——可以有多个Excel的Instance,但只有一个Outlook的Instance。
作为开发工作的前期准备,必须找到Outlook Object Model。其中最重要的两个Object分别是AppointmentItem(包括了Appointment和Meeting)和TaskItem:
- AppointmentItem Members in MSDN (Version Office 2010):http://msdn.microsoft.com/en-us/library/office/ff869026(v=office.14).aspx
- TaskItem Members in MSDN (Version Office 2010): http://msdn.microsoft.com/en-us/library/office/ff867891(v=office.14).aspx
其次,找到一些对应关系。Office界面的Text跟Member名称可能并不Match:
- Priority (UI) mapping to Importance。(OlImportance Enumeration)
- Private, High Importance and Low Importance, mapping to Sensitivity (OlSensitivity Enumeration)
再次,对于Recurrence,则是通过RecurrencePattern支持:
- Method GetRecurrencePattern会返回AppointmentItem或TaskItem上的Recurrence Pattern,如果尚未定义,就会返回一个新的empty Recurrence以供编辑;RecurrencePattern Members in MSDN: http://msdn.microsoft.com/en-us/library/office/ff869260(v=office.14).aspx
- Method GetOccurrence返回指定日期的AppointmentItem.
- Prority RecurrenceType则由OlRecurrenceType Enumeration控制;
- Prority Exceptions http://msdn.microsoft.com/en-us/library/office/ff869544(v=office.14).aspx 控制了该Recurrence Pattern上的Exception列表。具体的Exception同样由Exception Object http://msdn.microsoft.com/en-us/library/office/ff862466(v=office.14).aspx 呈现。
最后,值得注意的是:
- RecurrencePattern 在TaskItem和AppointmentItem上是不同的–AppointmentItem有Series的概念,而TaskItem没有。换言之,TaskItem定义Recurrence Pattern会创建一堆独立的Task Item。这也是GetOccurrence只能返回AppointmentItem的原因。
- 创建RecurrencePattern的Exception时,必须保证新的不能在同一个自然日里面。
是为之记。 Alva Chien 2013.12.16 - 2013.12.20