Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用C筛选Outlook项目#_C#_Calendar_Outlook_Ms Office - Fatal编程技术网

C# 使用C筛选Outlook项目#

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

我正在使用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]");
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;
    }
}