使用C#过滤Outlook项目

时间:2013-07-25 21:22:34

标签: c# calendar outlook ms-office

我正在使用Office对象模型从Outlook中检索我的日历项。我想使用Restrict()方法来获取今天的约会。我还想包括所有定期约会的单个实例(即不是所有重复 - 只是今天的那些)。

使用以下代码,无论日期如何,我都会收到很多(但不是全部)重复项,例如生日。我也得到了各种其他约会 - 但不是今天的约会。

我尝试了不同的日期格式,包括2013-07-25 00:00:00,没有运气。我研究了网络,并尝试从VBA脚本中复制示例 - 没有运气。

欣赏其他人的任何想法。

var outlook = new Application();
var calendar = outlook.GetNamespace("MAPI").GetDefaultFolder(OlDefaultFolders.olFolderCalendar);
DateTime today = DateTime.Today, tomorrow = today.AddDays(1);
const string DateFormat = "dd/MM/yyyy HH:mm";
string filter = string.Format("[Start] >= '{0}' AND [Start] < '{1}'", today.ToString(DateFormat), tomorrow.ToString(DateFormat));
var todaysAppointments = calendar.Items.Restrict(filter);
// todaysAppointments.IncludeRecurrences = true;
todaysAppointments.Sort("[Start]");

1 个答案:

答案 0 :(得分:0)

我使用下面的代码,它完美无缺。 我可能使用太多'IncludeRecurrences = false'但它有效;) 我不得不这样做,或者它表现得很奇怪(我认为'IncludeRecurrences'比较不同的东西)

只需将日历作为第一个参数,将pDateToRead作为您想要的日期。 (例如)

var calendar = outlook.GetNamespace("MAPI").GetDefaultFolder(OlDefaultFolders.olFolderCalendar);
var calendarItems = GetCalendarItemsOnDate(calendar, DateTime.Today);

实际方法:

public static IEnumerable<Outlook.AppointmentItem> GetCalendarItemsOnDate(this Outlook.MAPIFolder pCalendarFolder, DateTime pDateToRead)
{
    var filter = "( [Start] >= '" + pDateToRead.ToString("MM/dd/yyyy") + "'" + " AND " + "  [End]  < '" +     pDateToRead.AddDays(1).ToString("MM/dd/yyyy") + "' )";
    pCalendarFolder.Items.IncludeRecurrences = false;
    var outlookCalendarItems = pCalendarFolder.Items.Restrict(filter);
    outlookCalendarItems.IncludeRecurrences = false;

    var allItem = string.Empty;
    foreach (Outlook.AppointmentItem item in outlookCalendarItems)
    {
        if (item.IsRecurring)
        {
            continue;
        }
        yield return item;
    }
}