2010-07-12 108 views
1

我使用Outlook-Interop從不同日曆中讀取一些事件並在大屏幕上顯示它們。在我的機器上,一切正常(Outlook 2010,Win7 x64),但在客戶端的電腦上(Outlook2003,Win XP),該程序沒有找到所有約會。如果我添加了一些用於調試的複選框,可以在8到12個約會(12應該找到)之間找到並且沒有總是6.我不知道發生了什麼問題,請幫助我。Outlook Interop提供了不同的結果

下面的代碼:

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); 
    }); 

更新

我有一些新的信息。得到這個例外。任何想法如何處理?

(我從德國到英語翻譯,希望你能理解;))

The COM-Object of the type "System.__ComObject" couldn't be changed to the Interfacetype "Microsoft.Office.Interop.AppointmentItem. This procedure couldn't be run, because the Queryinterface-Call to the COM-Component for the interface with IID "{00063033-0000-0000-C000-000000000046}" couldn't be run because of the following error: Interface not supported (Exception _HRESULT:0x80004002 (E_NOINTERFACE)).

回答

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(); 
} 

您也可以嘗試篩選的開始日期項目集合。

var items = folder.Items.Restrict("[Start] < '01/31/2009 00:00 AM' and [Start] >= '01/30/2009 00:00 AM"); 
+0

聽起來不錯。我會試一試!可能需要1-2天... – 2010-07-12 12:16:52

+1

嗯,謝謝,但這不能解決問題。我開始認爲這可能是Outlook/Exchange的問題... – 2010-07-13 16:33:45

+0

在2003年和2010年,folder.Items.Count的數字是否相同? – 2010-07-14 06:23:40

0

確保您綁定到Office Interops的2003版本,該版本應該向前兼容。

+0

已經選中。爲了好玩,我也嘗試了v14並獲得了相同的結果(FYI) – 2010-08-19 22:41:29

相關問題