Подключиться к календарю Outlook из C# с помощью Interop

Хорошо, я пытаюсь подключиться к календарю Outlook из С#, используя следующий код:

using Outlook = Microsoft.Office.Interop.Outlook;

Outlook.Application msOutlook = new Outlook.Application();
Outlook.NameSpace ns = msOutlook.GetNamespace("MAPI");
Outlook.MAPIFolder folder = ns.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderCalendar);

foreach (Outlook.MAPIFolder subfolder in folder.Folders)
{
    MessageBox.Show(subfolder.Name);
}

Однако, несмотря на наличие двух календарей, фрагмент кода выше не видит ни одного!

Я думаю, что мне может повезти больше с приведенным ниже кодом:

Outlook.MAPIFolder folder = ns.GetFolderFromID("CalendarName", Type.Missing);

Но это вызывает следующее исключение:

Не удалось открыть элемент. Попробуйте еще раз.

Я предполагаю, что идентификатор календаря отличается от его имени.

Что я делаю не так?

Кроме того, я использую C # 4 с .Net 4 и Outlook 2010.


person JMK    schedule 09.02.2012    source источник


Ответы (1)


Оба календаря находятся в пространстве имен MAPI? Что, если вы пройдете по пространствам имен, чтобы увидеть, есть ли календарь у других:

Outlook.Application msOutlook = new Outlook.Application();
Outlook.NameSpace session = msOutlook.Session;
Outlook.Stores stores = session.Stores;
foreach (Outlook.Store store in stores)
{
    Outlook.MAPIFolder folder = store.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderCalendar);

    MessageBox.Show(folder.Name);
}
person John Koerner    schedule 09.02.2012