【问题标题】:Determine if an address book exists in Outlook 2010确定 Outlook 2010 中是否存在通讯簿
【发布时间】:2012-09-08 00:10:45
【问题描述】:

我已经按照here 的描述创建了一个地址簿,它的作用就像一个魅力。然后我想访问它 - 首先检查它是否存在(并在相反的情况下创建它),然后引用它。

我当前的代码依靠Exception 来检测丢失的名称文件夹,在我看来,这是一个丑陋的解决方法。我还没有找到更整洁的方法,例如.DoesFolderExist 之类的。我想得到一个关于如何改进它的建议。

Outlook.Folder contacts = 
  this.Application.Session.GetDefaultFolder(
    Outlook.OlDefaultFolders.olFolderContacts) as Outlook.Folder;
Outlook.Folder addressBook = null;

try { addressBook = contacts.Folders["My AB"] as Outlook.Folder; }
catch (Exception) { }

if (addressBook == null)
{
    addressBook = contacts.Folders.Add("My AB", 
      Outlook.OlDefaultFolders.olFolderContacts) as Outlook.Folder;
    addressBook.ShowAsOutlookAB = true;
}

我应该改用this.Application.Session.GetFolderFromID(...) 吗?问题是我需要指定通讯簿的名称(我有)和商店 ID(我没有)。我不想去那里,但是GetFolderFromID 方法的语法表明可能有两个不同的地址簿,它们的名称相同,但放在不同的商店中。是这样还是上面的contact.Folder["name"] 就足够了?

【问题讨论】:

    标签: c# vsto outlook-addin outlook-2010


    【解决方案1】:

    您可以使用 try/catch-statement 方法,但更好的方法是遍历每个 Folder 以避免异常和性能损失。

    Outlook.Folders contactFolders = contacts.Folders;
    if (contactFolders.Cast<Outlook.Folder>()
      .Where(c => c.Name == "My AB").Count() > 0)
        addressBook = contactFolders["My AB"] as Outlook.Folder;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-06-10
      • 2012-08-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多