Outlook查找/限制包含

本文关键字:包含 查找 Outlook | 更新日期: 2023-09-27 18:02:13

无论如何我可以使用查找或限制类似outlookfield.contains(mystring)?

http://msdn.microsoft.com/en-us/library/microsoft.office.interop.outlook._items.restrict%28v=office.14%29.aspx

Outlook查找/限制包含

根据您所链接的文档,没有办法这样做。

<

其他说明/strong>

如果您试图使用查找或限制方法用户定义字段,字段必须在文件夹中定义,否则将出现错误。没有办法执行"contains"操作。例如,不能使用"查找"或"限制"来搜索在"主题"字段中包含特定单词的项。相反,你可以使用AdvancedSearch方法,或者可以循环遍历所有的项,并使用InStr函数执行搜索在一个领域内。您可以使用Restrict方法来搜索项目从一定范围内的字符开始。例如,to搜索所有姓氏以字母M开头的联系人,使用这个过滤器:

sFilter = "[LastName]> 'LZZZ' And [LastName] <"N"

从你的问题中不清楚你到底想要做什么,以便给出更多的上下文,我试图计算所有包含特定字符串的主题的电子邮件(我称之为mystring以匹配你的示例)。

下面是我开始的代码:

 string mystring = "Such String";
 int count = inboxFolder.Items.Restrict("[Subject] = " + mystring).Count;
 Debug.WriteLine("{0} email(s) contain '{1}'", count, mystring);

只要电子邮件的主题是与mystring完全匹配的就可以工作,这还不够好,我需要它来计算字符串是否包含在主题中的任何地方。

我尝试了Axel Kemper的答案,添加*符号作为通配符,但它不适合我。

我没有使用advancedsearch方法(这里的文档相当晦涩),而是选择对每个条目执行循环,并手动检查它是否包含感兴趣的字符串:

string mystring = "Such String";
int count = 0;
foreach (var item in inboxFolder.Items)
{
    if (item is Outlook.MailItem)
    {
         Outlook.MailItem mailItem = item as Outlook.MailItem;
         if (mailItem.Subject != null && mailItem.Subject.Contains(mystring))
         {
             count++;
         }
    }
}
Debug.WriteLine("{0} email(s) contain '{1}'", count, mystring);

为了便于阅读和理解,我没有对代码进行重构,但这也可以做成一行LINQ表达式:

string mystring = "Such String";
int count = inboxFolder.Items.OfType<Outlook.MailItem>().Count(mailItem => mailItem.Subject != null && mailItem.Subject.Contains(mystring));
Debug.WriteLine("{0} email(s) contain '{1}'", count, mystring);

两者的输出:

42封电子邮件包含'Such String'

您可以在方括号中指定字段,如以下代码段所示:

Set contact = objContacts.Items.Find("[Email1Address]=" & Chr(34) & .SenderEmailAddress & Chr(34))
Set contact = objContacts.Items.Find("[FileAs] = ""Smith, Jeff"" and [FirstName] = ""Jeff""")

字段名在MSDN文档中有描述,或者可以使用VBA对象目录查看器进行检查。

要实现Contains,您可以使用*作为通配符之前和之后的字符串,您正在寻找(例如"*myString*")。要在字段中搜索文字*,必须使用~*