无法从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行获取完全正确的联系人。当我执行删除时,没有错误或其他消息。但是,联系人列表不受影响。
- 为什么?
- 我怎么做才能真正移除隐形眼镜?
我怀疑我可能正在处理包含联系人的实际列表的副本。问题是,如果我不创建列表,我不确定如何更改联系人列表。
因此,最有帮助的答案将揭示在特定条件下如何改变addressBook
(或addressBook.Items
)。例如,假设我们想要删除所有名称以字母"Q"开头的内容。
此时此刻,我只能想到一个超级丑陋的解决方案,它是如此丑陋,我甚至没有在这里提到它。真的丑…
不能删除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循环删除所有联系人