2015-03-31 246 views
1

我正在尝试使用c#windows应用程序为Outlook创建API。为此,要获取所有AppointmentItem,我使用下面的代码并且它正在工作。Outlook API在c#中获取会议详细信息#

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.MAPIFolder Inbox = null; 
      Microsoft.Office.Interop.Outlook.Items outlookCalendarItems = null; 

      oApp = new Microsoft.Office.Interop.Outlook.Application(); 
      mapiNamespace = oApp.GetNamespace("MAPI"); ; 
      mapiNamespace.Logon("", "",true, true); 
      CalendarFolder = mapiNamespace.GetDefaultFolder(Microsoft.Office.Interop.Outlook.OlDefaultFolders.olFolderCalendar); 
      CalendarFolder = oApp.Session.GetDefaultFolder(Microsoft.Office.Interop.Outlook.OlDefaultFolders.olFolderCalendar); 
      DateTime startTime = DateTime.Now; 
      DateTime endTime = startTime.AddDays(5); 
      //string filter = "[Start] >= '" + startTime.ToString("g") + "' AND [End] <= '" + endTime.ToString("g") + "'"; 
      outlookCalendarItems = CalendarFolder.Items; 
      // outlookCalendarItems.Restrict(filter); 
      // outlookCalendarItems.Sort("Start"); 
      outlookCalendarItems.IncludeRecurrences = true; 

      int i = 0; 
      foreach (Microsoft.Office.Interop.Outlook.AppointmentItem item in outlookCalendarItems) 
      { 

       dataGridCalander.Rows.Add(); 
       dataGridCalander.Rows[i].Cells[0].Value = i + 1; 

       if (item.Subject != null) 
       { 
        dataGridCalander.Rows[i].Cells[1].Value = item.Subject; 
       } 
} 

类似的方式,我想获得的前景和特定的会议室状态(可用与否)创建可用的会议室。提前致谢。

回答

0

我已经注意到下面的代码行:

foreach (Microsoft.Office.Interop.Outlook.AppointmentItem item in outlookCalendarItems) 

不要遍历回路中的所有Outlook项目。使用Find/FindNext或Restrict方法查找所需的子集。

或者使用Folder类的GetTable方法获得一个Table对象,该对象包含由Filter过滤的项目。如果Filter是空字符串或省略了Filter参数,则GetTable会返回一个表格,其中的行将表示文件夹中的所有项目。如果Filter是空字符串或者省略了Filter参数并且TableContents是olHiddenItems,则GetTable会返回一个表格,其中的行代表文件夹中的所有隐藏项目。

Sub DemoTable() 
    'Declarations 
    Dim Filter As String 
    Dim oRow As Outlook.Row 
    Dim oTable As Outlook.Table 
    Dim oFolder As Outlook.Folder 

    'Get a Folder object for the Inbox 
    Set oFolder = Application.Session.GetDefaultFolder(olFolderInbox) 

    'Define Filter to obtain items last modified after May 1, 2005 
    Filter = "[LastModificationTime] > '5/1/2005'" 
    'Restrict with Filter 
    Set oTable = oFolder.GetTable(Filter) 

    'Enumerate the table using test for EndOfTable 
    Do Until (oTable.EndOfTable) 
    Set oRow = oTable.GetNextRow() 
    Debug.Print (oRow("Subject")) 
    Debug.Print (oRow("LastModificationTime")) 
    Loop 
End Sub 

Outlook对象模型不提供任何房间的方法或属性。您可以使用名称空间类的OpenSharedFolder方法打开房间的共享日历。

请考虑使用EWS。有关更多信息,请参阅EWS Managed API, EWS, and web services in Exchange

+0

感谢您的回答。是否有可能获得资源? – 2015-03-31 11:53:07