无法从Outlook 2010的地址簿中删除联系人

本文关键字:地址簿 删除 联系人 2010 Outlook | 更新日期: 2023-09-27 17:53:36

我可以添加联系人到地址簿,但由于某种原因我不能删除它。我执行的代码如下:

String abName = "Name ofthe targetted address book";
Outlook.Folder addressBook;
if (targetFolder.Folders.OfType<Outlook.Folder>().Any(element
  => element.Name == abName))
  addressBook = targetFolder.Folders[abName] as Outlook.Folder;
else
  addressBook = targetFolder.Folders.Add(
    abName, Outlook.OlDefaultFolders.olFolderContacts) as Outlook.Folder;
addressBook.ShowAsOutlookAB = true;
for (int i = addressBook.Items.Count - 1; i >= 0; i--)
  if (!stringList.Any(element 
    => element == addressBook.Items.OfType<Outlook.ContactItem>()
      .ToList()[i].Email1Address))
    addressBook.Items.OfType<Outlook.ContactItem>().ToList().RemoveAt(i);

可以获取地址簿,也可以匹配字符串。我进入RemoveAt行获取完全正确的联系人。当我执行删除时,没有错误或其他消息。但是,联系人列表不受影响。

  1. 为什么?
  2. 我怎么做才能真正移除隐形眼镜?

我怀疑我可能正在处理包含联系人的实际列表的副本。问题是,如果我不创建列表,我不确定如何更改联系人列表。

因此,最有帮助的答案将揭示在特定条件下如何改变addressBook(或addressBook.Items)。例如,假设我们想要删除所有名称以字母"Q"开头的内容。

此时此刻,我只能想到一个超级丑陋的解决方案,它是如此丑陋,我甚至没有在这里提到它。真的丑…

无法从Outlook 2010的地址簿中删除联系人

不能删除Outlook联系人。您正在从您自己的列表对象中删除OUtlook对象。

您需要呼叫ContactItem.Delete

作为旁注,在处理COM对象时不要使用多个点表示法,特别是在循环中-您将为每个点接收一个全新的COM对象。

这是一个解决方案

    private void ClearContact(Outlook.Application outlookApplication)
    {
        Outlook.MAPIFolder contactFolder = outlookApplication.Session.GetDefaultFolder(OlDefaultFolders.olFolderContacts);
        int total = contactFolder.Items.Count;
        while (total > 0)
        {
            // first index number is 1 not 0
            var contact = (Outlook.ContactItem)contactFolder.Items[1];
            contact.Delete();
            total = contactFolder.Items.Count;
        }
    }

我使用的是office outlook apihttp://netoffice.codeplex.com/wikipage?title=Outlook_Example05并使用while循环删除所有联系人