繁体   English   中英

无法从Outlook 2010中的通讯簿中删除联系人

[英]Can't remove contacts from an address book in Outlook 2010

我可以将联系人添加到通讯簿,但是由于某些原因我无法将其删除。 我正在执行的代码如下。

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联系人。 您正在从自己的List对象中删除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;
        }
    }

我使用netoffice Outlook API http://netoffice.codeplex.com/wikipage?title=Outlook_Example05并使用while循环删除所有联系人

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM