.NET: Get all Outlook calendar items


How can I get all items from a specific calendar (for a specific date). Lets say for instance that I have a calendar with a recurring item every Monday evening. When I request all items like this:

CalendarItems = CalendarFolder.Items;
CalendarItems.IncludeRecurrences = true;

I only get 1 item...

Is there an easy way to get all items (main item + derived items) from a calendar? In my specific situation it can be possible to set a date limit but it would be cool just to get all items (my recurring items are time limited themselves).

I'm using the Microsoft Outlook 12 Object library (Microsoft.Office.Interop.Outlook).

10/10/2009 4:35:10 AM

Accepted Answer

I believe that you must Restrict or Find in order to get recurring appointments, otherwise Outlook won't expand them. Also, you must Sort by Start before setting IncludeRecurrences.

9/18/2008 11:08:05 AM

I've studied the docs and this is my result: I've put a time limit of one month hard-coded, but this is just an example.

public void GetAllCalendarItems()
    Microsoft.Office.Interop.Outlook.Application oApp = null;
    Microsoft.Office.Interop.Outlook.NameSpace mapiNamespace = null;
    Microsoft.Office.Interop.Outlook.MAPIFolder CalendarFolder = null;
    Microsoft.Office.Interop.Outlook.Items outlookCalendarItems = null;

    oApp = new Microsoft.Office.Interop.Outlook.Application();
    mapiNamespace = oApp.GetNamespace("MAPI"); ;
    CalendarFolder = mapiNamespace.GetDefaultFolder(Microsoft.Office.Interop.Outlook.OlDefaultFolders.olFolderCalendar);
    outlookCalendarItems = CalendarFolder.Items;
    outlookCalendarItems.IncludeRecurrences = true;

    foreach (Microsoft.Office.Interop.Outlook.AppointmentItem item in outlookCalendarItems)
        if (item.IsRecurring)
            Microsoft.Office.Interop.Outlook.RecurrencePattern rp = item.GetRecurrencePattern();
            DateTime first = new DateTime(2008, 8, 31, item.Start.Hour, item.Start.Minute, 0);
            DateTime last = new DateTime(2008, 10, 1);
            Microsoft.Office.Interop.Outlook.AppointmentItem recur = null;

            for (DateTime cur = first; cur <= last; cur = cur.AddDays(1))
                    recur = rp.GetOccurrence(cur);
                    MessageBox.Show(recur.Subject + " -> " + cur.ToLongDateString());
                { }
            MessageBox.Show(item.Subject + " -> " + item.Start.ToLongDateString());


Licensed under: CC-BY-SA with attribution
Not affiliated with: Stack Overflow