我正在尝试浏览Outlook文件夹并根据用户提供的特定条件(年龄,主题,内容)保存项目(SaveAs
)。我遇到的问题是我无法确定文件夹中某些项目的类型。我正在使用
if( currentItem is MailItem )
// do something
else if (currentItem is AppointmentItem)
// do something else
// etc.
尝试确定类型并适当处理该项目。不幸的是,我发现几种类型似乎与我测试过的任何列出的类型都不匹配。使用 OutlookSpy ,我可以查看显示为类型53 OlObjectClass.olMeetingRequest
的相关对象。这与MeetingItem
或AppointmentItem
都不匹配,我似乎没有看到任何其他可能出现的类型。我找不到MeetingRequestItem
或等价物。明显的方法,如GetType
只说它是一个COM对象,到目前为止我找不到其他方法似乎可以做到这一点。
我已阅读VSTO for Office 2007,但它没有提供我能够找到的任何指导。我搜索过MSDN,这个网站上有很多其他人没有太多运气。另一个用户发布的问题类似,但没有任何答案。 VS2010能够弄清楚,因为您可以向监视列表添加动态强制转换,它会显示对象信息,它只是不会告诉您它是什么。
很抱歉问我看起来像是一个菜鸟问题,但我试图找出一个对象到Interop类型映射。如果有人有动态确定Outlook对象类型的方法,这将真的有帮助;我对此并没有太多运气......
答案 0 :(得分:0)
会议请求,响应或更新以Outlook.MeetingItem
的形式发送。您可以使用AppointmentItem
访问基础MeetingItem.GetAssociatedAppointment()
。
以下是关于如何从AppointmentItem
访问MeetingItem
的{{3}}:
Outlook.Folder folder = Application.Session.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderInbox) as Outlook.Folder;
string filter = "[MessageClass] = 'IPM.Schedule.Meeting.Request'";
Outlook.Items items = folder.Items.Restrict(filter);
foreach (Outlook.MeetingItem request in items)
{
Outlook.AppointmentItem appt = request.GetAssociatedAppointment(false);
if (appt != null)
Debug.WriteLine(appt.Subject);
}