2011-02-06 107 views
3

我正在寫一個程序,檢查預約的前景,基本上我只需要當前的任命 - 如果當前沒有預約,然後就在旁邊,甚至以前的預約。檢索當前Outlook約會

我想這樣做我需要使用[restrict method] [1]來限制約會集合,然後根據restrict參數選擇第一個或最後一個約會(例如,僅限於約會結束在當前時間之後,或者僅在當前時間之前開始約會)。 我在作爲參數需要的字符串過濾器方面遇到了很多麻煩。

一個簡單的例子VB(代碼殘端)如下([源] [2])

myStart = Format(Date, "mm/dd/yyyy hh:mm AMPM")  
strRestriction = "[Start] <= '" & myStart & "'" 

'Restrict the Items collection 
Set oResItems = oItems.Restrict(strRestriction) 
'Sort 
oResItems.Sort "[Start]" 

但是,試圖做同樣在C#似乎並不奏效。

// Create the Outlook application. 
Outlook.Application oApp = new Outlook.Application(); 

// Get the NameSpace and Logon information. 
// Outlook.NameSpace oNS = (Outlook.NameSpace)oApp.GetNamespace("mapi"); 
Outlook.NameSpace oNS = oApp.GetNamespace("mapi"); 

//Log on by using a dialog box to choose the profile. 
oNS.Logon(Missing.Value, Missing.Value, true, true); 

// Get the Calendar folder. 
Outlook.MAPIFolder oCalendar = oNS.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderCalendar); 

// Get the Items (Appointments) collection from the Calendar folder. 
oItems = oCalendar.Items; 
oItems.IncludeRecurrences = true; 

// THIS IS THE PROBLEM AREA 
String filter = "[Start] <= '" + DateTime.Now.ToString("MM/dd/yyyy hh:mm AMPM") + "'"; 
Outlook.Items restrictedItems = oItems.Restrict(filter); 
// Take the last item on the list - should be current or next appointment 
restrictedItems.Sort("[Start]"); 
Outlook.AppointmentItem oAppt = restrictedItems.GetLast(); 


// Done. Log off. 
oNS.Logoff(); 

首先,我想,因爲所述過濾器是一個字符串,日期格式必須是YYYY/MM/DD hh:mm:ss的?我似乎無法找到如何操作[開始],喜歡它解析爲一個日期或東西的任何文檔(我嘗試了各種各樣的事情,但沒有任何工程)。根據我使用的日期格式,我將在得到錯誤的約會,否則程序將無法使用GetLast由於不包括所有約會的過濾器。我已經看到幾個人聲稱他們已經開始工作的例子,但他們要麼循環約會(效率太低),要麼日期格式看起來像他們不能被信任返回正確的任命(好像是這個傢伙social.msdn.microsoft.com/Forums/en-US/vsto/thread/c6a8bd21-6534-43be-b23e-1068651da92e,誰也似乎如果使用已經硬編碼的日期,而不是DateTime.Now ..)

更新:我決定我不想浪費更多時間來嘗試工作的限制角度,所以我目前只是循環如下所示,但任何建議更有效的代碼非常歡迎。

DateTime currentTime = DateTime.Now; 
foreach (Outlook.AppointmentItem item in oItems) 
{ 
    if (item.Start <= currentTime && item.End.Subtract(new TimeSpan(0, 10, 0)) > currentTime) 
    { 
     appointmentArrayList.Add(item); 
    } 
} 

回答

2

通過以下信息發現here,我能得到它來工作「YYYY-MM-DD HH:MM」的格式字符串了toString電話。

希望這會有所幫助。

+0

非常感謝!一切似乎都像現在一樣工作。似乎我忘記了M的月份:S – Madsn 2011-02-19 23:54:16

3

這是你的問題:

DateTime.Now.ToString("MM/dd/yyyy hh:mm AMPM") 

我想你會的是:

DateTime.Now.ToString("MM/dd/yyyy hh:mm tt", CultureInfo.InvariantCulture) 
0

此代碼的工作,顯示從今天起Outlook約會:

public partial class _Default : System.Web.UI.Page 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 
     DemoAppointmentsInRange(); 
    } 

    private void DemoAppointmentsInRange() 
    { 
     Application a = new Application(); 
     Microsoft.Office.Interop.Outlook.Folder calFolder = a.Session.GetDefaultFolder(Microsoft.Office.Interop.Outlook.OlDefaultFolders.olFolderCalendar) as Microsoft.Office.Interop.Outlook.Folder; 
     DateTime start = DateTime.Now; 
     DateTime end = start.AddDays(5); 
     Microsoft.Office.Interop.Outlook.Items rangeAppts = GetAppointmentsInRange(calFolder, start, end); 
     if (rangeAppts != null) 
     { 
      foreach (Microsoft.Office.Interop.Outlook.AppointmentItem appt in rangeAppts) 
      { 
       Response.Write("Subject: " + appt.Subject + " "+" Start: "+appt.Start.ToString()+" "+"End:"+appt.End.ToString()+"<br/>"); 
      } 
     } 
    } 
    private Microsoft.Office.Interop.Outlook.Items GetAppointmentsInRange(
    Microsoft.Office.Interop.Outlook.Folder folder, DateTime startTime, DateTime endTime) 
    { 
     string filter = "[Start] >= '"+ startTime.ToString("g")+ "' AND [End] <= '" + endTime.ToString("g") + "'"; 
     //Response.Write(filter); 
     try 
     { 
      Microsoft.Office.Interop.Outlook.Items calItems = folder.Items; 
      calItems.IncludeRecurrences = true; 
      calItems.Sort("[Start]", Type.Missing); 
      Microsoft.Office.Interop.Outlook.Items restrictItems = calItems.Restrict(filter); 
      if (restrictItems.Count > 0) 
      { 
       return restrictItems; 
      } 
      else 
      { 
       return null; 
      } 
     } 
     catch 
     { 
      return null; 
     } 
    } 
} 
+0

請解釋您的代碼的作用。 – 2017-12-01 09:53:38