2013-07-25 83 views
2

我正在使用Office對象模型從Outlook中檢索我的日曆項目。我想使用Restrict()方法來獲取今天的約會。我還想包括所有定期約會的單一實例(即不是所有的重複 - 就是今天的重複)。使用C過濾Outlook項目

使用下面的代碼,無論日期如何,我都會獲得許多(但不是全部)重複項目,例如生日。我也得到各種其他約會 - 但不是今天的約會。

我已經嘗試了不同的日期格式,包括2013-07-25 00:00:00,沒有運氣。我研究過網絡,並試圖從VBA腳本中複製示例 - 沒有運氣。

欣賞來自其他人的任何想法。

var outlook = new Application(); 
var calendar = outlook.GetNamespace("MAPI").GetDefaultFolder(OlDefaultFolders.olFolderCalendar); 
DateTime today = DateTime.Today, tomorrow = today.AddDays(1); 
const string DateFormat = "dd/MM/yyyy HH:mm"; 
string filter = string.Format("[Start] >= '{0}' AND [Start] < '{1}'", today.ToString(DateFormat), tomorrow.ToString(DateFormat)); 
var todaysAppointments = calendar.Items.Restrict(filter); 
// todaysAppointments.IncludeRecurrences = true; 
todaysAppointments.Sort("[Start]"); 
+0

您是否嘗試過此日期格式'Mddyy H:毫米tt'?從這裏:http://msdn.microsoft.com/en-us/library/office/bb220350(v=office.12).aspx – Alden

+0

感謝您的建議。我嘗試了這個,得到了不同的結果。在IncludeRecurrences = true的情況下,我只是得到了定期約會 - 就像人們的生日一樣。如果這樣做是假的,我只會得到3個生日,沒有別的 - 而且這個月的生日也不是這個月...... – Saqib

回答

0

我用下面的代碼,它完美的工作。 我大概用了太多「IncludeRecurrences =假」,但它的工作原理;) 我必須這樣做,或者它的行爲怪異(我認爲「IncludeRecurrences」有不同的比較的東西)

只要把日曆中,作爲第一個參數和pDateToRead作爲你想要的日期。 (例如)

var calendar = outlook.GetNamespace("MAPI").GetDefaultFolder(OlDefaultFolders.olFolderCalendar); 
var calendarItems = GetCalendarItemsOnDate(calendar, DateTime.Today); 

實際方法:

public static IEnumerable<Outlook.AppointmentItem> GetCalendarItemsOnDate(this Outlook.MAPIFolder pCalendarFolder, DateTime pDateToRead) 
{ 
    var filter = "([Start] >= '" + pDateToRead.ToString("MM/dd/yyyy") + "'" + " AND " + " [End] < '" +  pDateToRead.AddDays(1).ToString("MM/dd/yyyy") + "')"; 
    pCalendarFolder.Items.IncludeRecurrences = false; 
    var outlookCalendarItems = pCalendarFolder.Items.Restrict(filter); 
    outlookCalendarItems.IncludeRecurrences = false; 

    var allItem = string.Empty; 
    foreach (Outlook.AppointmentItem item in outlookCalendarItems) 
    { 
     if (item.IsRecurring) 
     { 
      continue; 
     } 
     yield return item; 
    } 
}