C# 是否有方法从所有Outlook';共享日历?

C# 是否有方法从所有Outlook';共享日历?,c#,outlook,interop,outlook-restapi,netoffice,C#,Outlook,Interop,Outlook Restapi,Netoffice,我的问题是,我无法访问和迭代Outlook的共享日历。我尝试了几种方法,但它们都将我带回默认日历(即我的帐户日历) 我尝试在子文件夹中循环使用GetSharedDefaultFolder()方法,并使用互操作库中不同类型的对象,但无法解决此问题 Here are the methods I've tried. To run the program (in particular GetMethod3() and GetMethod5()) you have to set the string "e

我的问题是,我无法访问和迭代Outlook的共享日历。我尝试了几种方法,但它们都将我带回默认日历(即我的帐户日历)

我尝试在子文件夹中循环使用GetSharedDefaultFolder()方法,并使用互操作库中不同类型的对象,但无法解决此问题

Here are the methods I've tried. To run the program (in particular GetMethod3() and GetMethod5()) you have to set the string "email" with your own email.

using System;
using System.Text;
using Microsoft.Office.Interop.Outlook;

namespace OutlookTest {
    class Program {

        static void Main(string[] args) {

            OutlookSharedCalendar outlookSharedCalendar = new OutlookSharedCalendar();

        }
    }

    public class OutlookSharedCalendar{

        Microsoft.Office.Interop.Outlook.Application oApp;
        NameSpace oNameSpace = null;
        MAPIFolder oMAPIFolder = null;
        MAPIFolder objFolder = null;
        MAPIFolder objSubFolder = null;
        Explorer objExplorer;
        AppointmentItem objCalenderItem;
        Folders objOutlookFolders;
        AddressEntry addrEntry = null;
        Items oCalendarItems = null;
        string email = "myemail@email.com";

        public OutlookSharedCalendar() {

            AppStart();
            GetMethod1();
            AppEnd(); 

            AppStart();
            GetMethod2();
            AppEnd();

            AppStart();
            GetMethod3();
            AppEnd();

            AppStart();
            GetMethod4();
            AppEnd();

            AppStart();
            GetMethod5();
            AppEnd();
        }

        public void GetMethod1() {
            oMAPIFolder = oApp.Session.GetDefaultFolder(OlDefaultFolders.olFolderCalendar);
            oCalendarItems = (Items)oMAPIFolder.Items;
            oCalendarItems.IncludeRecurrences = true;
            foreach(AppointmentItem item in oCalendarItems) {

                if(item.IsRecurring) {

                    RecurrencePattern oRP = item.GetRecurrencePattern();
                    DateTime first = new DateTime(2018, 01, 01, item.Start.Hour, item.Start.Minute, 0);
                    DateTime last = new DateTime(2019, 10, 31);
                    AppointmentItem recur = null;

                    for(DateTime cur = first; cur <= last; cur = cur.AddDays(1)) {
                            recur = oRP.GetOccurrence(cur);
                            Console.WriteLine(recur.Subject + " - " + cur.ToLongDateString() + " - " + recur.Body);
                    }
                }
                else {
                    Console.WriteLine(item.Subject + " -> " + item.Start.ToLongDateString());
                }
            }
        }

        public void GetMethod2() {
            int intFolderCtr;
            int intSubFolderCtr;
            int intAppointmentCtr;
            // >> Initialize The Base Objects
            objOutlookFolders = oApp.Session.Folders;
            // >> Loop Through The PST Files Added n Outlook
            for(intFolderCtr = 1; intFolderCtr <= objOutlookFolders.Count; intFolderCtr++) {
                objFolder = objOutlookFolders[intFolderCtr];
                objExplorer = objFolder.GetExplorer();
                // >> Loop Through The Folders In The PST File
                for(intSubFolderCtr = 1; intSubFolderCtr <= objExplorer.CurrentFolder.Folders.Count; intSubFolderCtr++) {
                    objSubFolder = objExplorer.CurrentFolder.Folders[intSubFolderCtr];
                    // >> Check if Folder Contains Appointment Items
                    if(objSubFolder.DefaultItemType == OlItemType.olAppointmentItem) {
                        // >> Loop Through Appointment Items
                        for(intAppointmentCtr = 1; intAppointmentCtr <= objSubFolder.Items.Count; intAppointmentCtr++) {
                            // >> Get Teh Calender Item From The Calender Folder
                            objCalenderItem = objSubFolder.Items[intAppointmentCtr];
                            // >> Process Appointment Item Accordingly
                            Console.WriteLine(objCalenderItem.Subject + " - " + objCalenderItem.Start + " - " + objCalenderItem.Body + " - " + objCalenderItem.Location);
                        }
                    }
                }
            }
        }

        public void GetMethod3() {

            DateTime dtFrom = new DateTime(DateTime.Now.Year, 01, 01);
            DateTime dtTo = new DateTime(DateTime.Now.Year, 12, 31);

            Recipient teamMember = oApp.Session.CreateRecipient(email);
            MAPIFolder sharedCalendar = oApp.Session.GetSharedDefaultFolder(teamMember, OlDefaultFolders.olFolderCalendar);
            if(sharedCalendar.DefaultMessageClass != "IPM.Appointment" || teamMember.DisplayType != 0) {
                return; //Calendar not shared.
            }

            string restrictCriteria = "[Start]<=\"" + dtTo.ToString("g") + "\"" + " AND [End]>=\"" + dtFrom.ToString("g") + "\"";

            Items results = sharedCalendar.Items.Restrict(restrictCriteria);

            foreach(AppointmentItem item in results) {
                Console.WriteLine(item.Subject + " - " + item.Start + " - " + item.Body + " - " + item.Location);
            }
        }

        public void GetMethod4() {

            oMAPIFolder = oApp.Session.GetDefaultFolder(OlDefaultFolders.olFolderCalendar);

            DateTime dtEnd = new DateTime(DateTime.Now.Year, 12, 31);
            DateTime dtStart = new DateTime(DateTime.Now.Year, 01, 01);
            string restrictCriteria = "[Start]<=\"" + dtEnd.ToString("g") + "\"" +
                                      " AND [End]>=\"" + dtStart.ToString("g") + "\"";
            StringBuilder strBuilder = null;
            Items folderItems = null;
            Items resultItems = null;
            AppointmentItem appItem = null;
            int counter = default(int);
            object item = null;

            strBuilder = new StringBuilder();
            folderItems = (Items)oMAPIFolder.Items;
            folderItems.IncludeRecurrences = true;
            folderItems.Sort("[Start]");
            resultItems = folderItems.Restrict(restrictCriteria);
            item = resultItems.GetFirst();
            do {
                if(item != null) {
                    if(item is AppointmentItem) {
                        counter++;
                        appItem = item as AppointmentItem;
                        Console.WriteLine(appItem.Subject + " -> " + appItem.Start.ToLongDateString());
                        strBuilder.AppendLine("#" + counter.ToString() +
                                              "\tStart: " + appItem.Start.ToString() +
                                              "\tSubject: " + appItem.Subject +
                                              "\tLocation: " + appItem.Location);
                    }
                    item = resultItems.GetNext();
                }
            }
            while(item != null);
        }

        public void GetMethod5() {

            addrEntry = oApp.Session.CurrentUser.AddressEntry;
            if(addrEntry.Type == "EX") {
                Recipient recip = oApp.Session.CreateRecipient(email);
                if(recip.Resolve()) {
                    Folder folder = oApp.Session.GetSharedDefaultFolder(recip, OlDefaultFolders.olFolderCalendar) as Folder;
                    foreach(AppointmentItem item in folder.Items) {

                        Console.WriteLine(item.Subject + " - " + item.Start + " - " + item.Body + " - " + item.Location);

                    }
                }
            }
        }

            public void AppStart() {

            // >> Start Outlook
            oApp = new Microsoft.Office.Interop.Outlook.Application();
        }
            public void AppEnd() {

            // >> Close Application
            oApp.Quit();
            // >> Release COM Object
            System.Runtime.InteropServices.Marshal.ReleaseComObject(oApp);
            oApp = null;

        }

    }
}
以下是我尝试过的方法。要运行程序(特别是GetMethod3()和GetMethod5()),您必须使用自己的电子邮件设置字符串“email”。
使用制度;
使用系统文本;
使用Microsoft.Office.Interop.Outlook;
名称空间了望测试{
班级计划{
静态void Main(字符串[]参数){
OutlookSharedCalendar OutlookSharedCalendar=新的OutlookSharedCalendar();
}
}
公共类OutlookSharedCalendar{
Microsoft.Office.Interop.Outlook.Application oApp;
命名空间oNameSpace=null;
MAPIFolder-omapipfolder=null;
MAPIFolder objFolder=null;
MAPIFolder objSubFolder=null;
探索者对象探索者;
任命项目objCalenderItem;
文件夹对象文件夹;
AddressEntry addrEntry=null;
Items OcalendariItems=null;
字符串电子邮件=”myemail@email.com";
公共OutlookSharedCalendar(){
AppStart();
GetMethod1();
附加();
AppStart();
GetMethod2();
附加();
AppStart();
GetMethod3();
附加();
AppStart();
GetMethod4();
附加();
AppStart();
GetMethod5();
附加();
}
public void GetMethod1(){
omapipfolder=oApp.Session.GetDefaultFolder(OlDefaultFolders.olFolderCalendar);
oCalendarItems=(Items)omapipfolder.Items;
oCalendarItems.includeCurrences=true;
foreach(oCalendarItems中的任命项){
如果(项目:正在执行){
RecurrencePattern oRP=item.GetRecurrencePattern();
DateTime first=新的日期时间(2018,01,01,item.Start.Hour,item.Start.Minute,0);
DateTime last=新的日期时间(2019,10,31);
AppointmentItem recur=null;
对于(DateTime cur=first;cur>初始化基本对象
objOutlookFolders=oApp.Session.Folders;
//>>循环浏览Outlook中添加的PST文件
对于(intFolderCtr=1;intFolderCtr>循环浏览PST文件中的文件夹
对于(intSubFolderCtr=1;intSubFolderCtr>检查文件夹是否包含约会项目
if(objSubFolder.DefaultItemType==OlItemType.olAppointmentItem){
//>>循环查看约会项目
对于(intAppointmentCtr=1;intAppointmentCtr>从日历文件夹中获取日历项
objCalendItem=objSubFolder.Items[intAppointmentCtr];
//>>相应地处理预约项目
Console.WriteLine(objcalendItem.Subject+“-”+objcalendItem.Start+“-”+objcalendItem.Body+“-”+objcalendItem.Location);
}
}
}
}
}
public void GetMethod3(){
DateTime dtFrom=新的DateTime(DateTime.Now.Year,01,01);
DateTime dtTo=新的DateTime(DateTime.Now.Year,12,31);
收件人团队成员=oApp.Session.CreateRecipient(电子邮件);
MAPIFolder sharedCalendar=oApp.Session.GetSharedDefaultFolder(团队成员,OldDefaultFolders.olFolderCalendar);
如果(sharedCalendar.DefaultMessageClass!=“IPM.Appointment”| | teamMember.DisplayType!=0){
return;//日历未共享。
}
string restrictCriteria=“[Start]=\”+dtFrom.ToString(“g”)+“\”;
项目结果=sharedCalendar.Items.Restrict(限制标准);
foreach(结果中的任命项){
Console.WriteLine(item.Subject+“-”+item.Start+“-”+item.Body+“-”+item.Location);
}
}
public void GetMethod4(){
omapipfolder=oApp.Session.GetDefaultFolder(OlDefaultFolders.olFolderCalendar);
DateTime dtEnd=新的DateTime(DateTime.Now.Year,12,31);
DateTime dtStart=newdatetime(DateTime.Now.Year,01,01);
string restrictCriteria=“[Start]=\”+dtStart.ToString(“g”)+“\”;
StringBuilder strBuilder=null;
Items folderItems=null;
Items resultItems=null;
AppointmentItem appItem=null;
int计数器=默认值(int);
对象项=null;
strBuilder=新的StringBuilder();
folderItems=(Items)oMAPIFolder.Items;
folderItems.includeCurrences=true;
排序(“[Start]”);
resultItems=folderItems.Restrict(限制标准);
item=resultItems.GetFirst();
做{
如果(项!=null){
如果(项目为任命项目){
计数器++;
appItem=作为任命项目的项目;
Console.WriteLine(appItem.Subject+“->”+appItem.Start.ToLongDateString());
strBuilder.AppendLine(“#”+counter.ToString()+
“\t开始:”+appItem.Start.ToString()+
“\t对象:”+appItem.Subject+
“\t位置:”+appItem.Location);
}
item=resultItems.GetNext();
}
}
while(item!=null);
}
P
public void GetMethod3() {

    DateTime dtFrom = new DateTime(DateTime.Now.Year, 01, 01);
    DateTime dtTo = new DateTime(DateTime.Now.Year, 12, 31);

    Recipient teamMember = oApp.Session.CreateRecipient(email);
    teamMember.Resolve();
    if(teamMember.Resolved)
    { 
       MAPIFolder sharedCalendar = oApp.Session.GetSharedDefaultFolder(teamMember, OlDefaultFolders.olFolderCalendar);
       if(sharedCalendar.DefaultMessageClass != "IPM.Appointment" || teamMember.DisplayType != 0) {
           return; //Calendar not shared.
       }

       string restrictCriteria = "[Start]<=\"" + dtTo.ToString("g") + "\"" + " AND [End]>=\"" + dtFrom.ToString("g") + "\"";

       Items results = sharedCalendar.Items.Restrict(restrictCriteria);

       foreach(AppointmentItem item in results) {
          Console.WriteLine(item.Subject + " - " + item.Start + " - " + item.Body + " - " + item.Location);
       }
    }
}