C# 使用C筛选Outlook项目#
我正在使用Office对象模型从Outlook检索日历项目。我想使用Restrict()方法只获取今天的约会。我还希望包括所有定期约会的单个实例(即,不是所有的定期约会-只是今天的那些) 通过下面的代码,我可以得到很多(但不是全部)重复出现的项目,比如生日,而不管日期。我还有其他各种约会,但今天没有 我尝试过不同的日期格式,包括2013-07-25 00:00:00,但运气不佳。我研究过网络,并试图从VBA脚本中复制示例-运气不好 感谢他人提出的任何想法C# 使用C筛选Outlook项目#,c#,calendar,outlook,ms-office,C#,Calendar,Outlook,Ms Office,我正在使用Office对象模型从Outlook检索日历项目。我想使用Restrict()方法只获取今天的约会。我还希望包括所有定期约会的单个实例(即,不是所有的定期约会-只是今天的那些) 通过下面的代码,我可以得到很多(但不是全部)重复出现的项目,比如生日,而不管日期。我还有其他各种约会,但今天没有 我尝试过不同的日期格式,包括2013-07-25 00:00:00,但运气不佳。我研究过网络,并试图从VBA脚本中复制示例-运气不好 感谢他人提出的任何想法 var outlook = new Ap
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]");
var outlook=new Application();
var calendar=outlook.GetNamespace(“MAPI”).GetDefaultFolder(OlDefaultFolders.olFolderCalendar);
DateTime today=DateTime.today,明天=today.AddDays(1);
常量字符串DateFormat=“dd/MM/yyyy HH:MM”;
string filter=string.Format(“[Start]>='{0}'和[Start]<'{1}',今天.ToString(DateFormat),明天.ToString(DateFormat));
var todayspaintments=calendar.Items.Restrict(过滤器);
//Today Points.includeCurrences=true;
todayspaints.Sort(“[Start]”);
我使用了下面的代码,它工作得非常好。
我可能使用了太多的“includeCurrences=false”,但它确实有效;)
我必须这样做,否则它的行为会很奇怪(我认为“includecurrences”的比较方式有所不同)
只需将日历作为第一个参数,并将pdateRead作为您想要的日期。
(例如)
实际方法:
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;
}
}
public static IEnumerable GetCalendarItemsOnDate(此Outlook.MAPIFolder pCalendarFolder,DateTime pDateToRead)
{
var filter=“([Start]>=”+pDateToRead.ToString(“MM/dd/yyyy”)+“+”和“+”[End]<”+pDateToRead.AddDays(1).ToString(“MM/dd/YYYYYY”)+”);
pCalendarFolder.Items.includeCurrences=false;
var-outlookCalendarItems=pCalendarFolder.Items.Restrict(过滤器);
outlookCalendarItems.IncludeCurrences=false;
var allItem=string.Empty;
foreach(Outlook日历项目中的Outlook.AppointmentItem项目)
{
如果(项目:正在执行)
{
继续;
}
收益回报项目;
}
}
您尝试过这种日期格式吗?谢谢你的建议。我试过这个,得到了完全不同的结果。使用includeCurrences=true,我只是得到了定期约会——比如人们的生日。设置为false时,我只得到3个生日,其他什么都没有——而这些生日甚至都不是这个月。。。
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;
}
}