C# 是否有方法从所有Outlook';共享日历?
我的问题是,我无法访问和迭代Outlook的共享日历。我尝试了几种方法,但它们都将我带回默认日历(即我的帐户日历) 我尝试在子文件夹中循环使用GetSharedDefaultFolder()方法,并使用互操作库中不同类型的对象,但无法解决此问题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
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);
}
}
}