我正在使用Outlook-Interop从不同的日历中读取一些事件并在大屏幕上显示它们。在我的机器上一切正常(Outlook 2010,Win7 x64),但在客户端的PC(Outlook2003,Win XP)上,该程序找不到所有约会。如果我添加一些用于调试的复选框,工具会找到8到12个约会(它应该找到12个)而且总是没有6个。我不知道出了什么问题,所以请帮帮我。
以下是代码:
this.Appointments = new List<AppointmentItem>();
foreach (MAPIFolder folder in this.SelectedCalendars)
{
foreach (object app in folder.Items)
{
if (app is AppointmentItem && ((AppointmentItem)app).Start.Date == DateTime.Now.Date)
{
this.Appointments.Add(((AppointmentItem)app));
}
}
}
this.Appointments.Sort(
delegate(AppointmentItem App1, AppointmentItem App2)
{
return App1.Start.CompareTo(App2.Start);
});
更新
我有一些新信息。得到了这个例外。知道如何处理?
(我从德语翻译成英语;希望你能理解;)
“System .__ ComObject”类型的COM-Object不可能 改为Interfacetype “Microsoft.Office.Interop.AppointmentItem。 无法运行此过程,因为Queryinterface-Call to the 用于IID接口的COM-Component “{00063033-0000-0000-C000-000000000046}” 因以下错误而无法运行: 不支持接口(例外_HRESULT:0x80004002(E_NOINTERFACE))。
答案 0 :(得分:0)
它可能是COM对象失败的迭代器。
如果您重新编写循环以明确调用GetFirst()
和GetNext()
,它是否有效:
object app = folder.Items.GetFirst();
while (app != null)
{
if (app is AppointmentItem && ((AppointmentItem)app).Start.Date == DateTime.Now.Date)
{
this.Appointments.Add(((AppointmentItem)app));
}
app = folder.Items.GetNext();
}
您还可以尝试在开始日期过滤Items集合。
var items = folder.Items.Restrict("[Start] < '01/31/2009 00:00 AM' and [Start] >= '01/30/2009 00:00 AM");
答案 1 :(得分:0)
确保您受到2003版Office Interops的约束,该版本应该是向前兼容的。