Я ищу способ доступа к групповому календарю в надстройке Outlook VSTO. Я могу только искать календарь по умолчанию в Outlook. Ниже я поделился изображением из Outlook, на котором показаны несколько групповых календарей. Как я могу получить доступ к этим групповым календарям из кода VSTO?
Вы можете использовать объект Модуль навигации в Outlook, чтобы получить доступ к групповым календарям (или общим). Объект NavigationModule обеспечивает доступ к различным модулям навигации, которые отображаются в области навигации Microsoft Outlook. Например:
Sub Test()
Const olFolderCalendar = 9
Const olModuleCalendar = 1
Const olAppointmentItem = 1
Dim answer As Integer
Dim objNS
Dim objExpCal
Dim objNavMod
Dim objNavGroup
Dim objNavFolder
Dim objFolder
Dim colExpl
Set oApp = CreateObject("Outlook.Application")
Set objNS = oApp.Session
Set colExpl = oApp.Explorers
Set objExpCal = objNS.GetDefaultFolder(olFolderCalendar).GetExplorer
Set objNavMod = objExpCal.NavigationPane.Modules.GetNavigationModule(olModuleCalendar)
For Each objNavGroup In objNavMod.NavigationGroups
For Each objNavFolder In objNavGroup.NavigationFolders
If Not objNavFolder = "YOUR CALENDAR NAME" Then 'exactly as in Outlook
GoTo NxtGroup
End If
On Error Resume Next
Set objFolder = objNavFolder.Folder
NxtGroup:
Next
Next
MsgBox objFolder.Name
Set objNS = Nothing
Set objNavMod = Nothing
Set objNavGroup = Nothing
Set objNavFolder = Nothing
Set objFolder = Nothing
Set colExpl = Nothing
End Sub
Добавление версии ответа С#, поскольку исходный вопрос был запрошен для С#
Outlook.NameSpace mapiNamespace = Globals.ThisAddIn.Application.GetNamespace("MAPI");
Outlook.CalendarModule calendarModule = (Outlook.CalendarModule)mapiNamespace.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderCalendar).GetExplorer().NavigationPane.Modules.GetNavigationModule(Outlook.OlNavigationModuleType.olModuleCalendar);
Outlook.NavigationGroups navGroups = calendarModule.NavigationGroups;
foreach (Outlook.NavigationGroup navGroup in navGroups)
{
Outlook.NavigationFolders navFolders = navGroup.NavigationFolders;
foreach (Outlook.NavigationFolder navFolder in navGroup.NavigationFolders)
{
try
{
if (navFolder.Folder != null && navFolder.Folder.Name.Equals("<Add your group calendar name here>"))
{
//do stuff here
return;
}
}
catch (Exception ex)
{
//handle exception as needed and iterate to next
continue;
}
}
}
Объектная модель Outlook является общей для всех языков программирования. Не забудьте отметить ответ.