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根据您所链接的文档,没有办法这样做。
<其他说明/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*")。要在字段中搜索文字*
,必须使用~*
。