C# - Outlook - 访问新日历

时间:2015-04-05 15:34:17

标签: c# calendar outlook

我正在尝试使用C#阅读我在Outlook中的所有日历,但是我在访问我在Outlook中创建的日历时遇到了问题(右键单击 - >新日历)。

我试图通过以下方式获取它们:

Outlook.Application app = new Outlook.Application();
Outlook.NameSpace ns = app.GetNamespace("MAPI");
Outlook.MAPIFolder folderss =   ns.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderCalendar);

或通过:

Application.Session.Stores

但他们都没有我的新日历。

你有想法如何与他们联系吗?

1 个答案:

答案 0 :(得分:1)

日历只有Folders DefaultItemType OlItemType.olAppointmentItem 可以在Stores层次结构的任何级别的任何Outlook Folder中创建它们。

假设日历是在Stores之一的根文件夹中创建的,则以下C#代码会找到它:

 void findMyCalendar(String name)
    {
        string path = null;

        Outlook.Application app = new Outlook.Application();
        Outlook.NameSpace ns = app.GetNamespace("MAPI");

        //  there may be more than one Store
        //  each .ost and .pst file is a Store
        Outlook.Folders folders = ns.Folders;

        foreach (Outlook.Folder folder in folders)
        {
            Outlook.MAPIFolder root = folder;
            path = findCalendar(root, name);

            if (path != null)
            {
                break;
            }
        }

        MessageBox.Show(path ?? "not found!");
    }

//  non-recursive search for just one level
public string findCalendar(MAPIFolder root, string name)
    {
        string path = null;

        foreach (Outlook.MAPIFolder folder in root.Folders) 
        {
            if (folder.Name.Equals(name, StringComparison.InvariantCultureIgnoreCase) &&
                (folder.DefaultItemType == OlItemType.olAppointmentItem))
            {
                path = folder.FolderPath;
                break;
            }
        }

        return path;
    }