使用Outlook对象筛选的_Items.Restrict方法时,“不支持使用like的模糊查询”

背景:

    用Microsoft.Office.Interop.Outlook取得日历项,然后根据业务要求筛选。

 

现象:

    items.Restrict方法中的筛选器,使用like进行模糊查询时,会出COMException异常。

 

代码:

 1                 //folder取得前略
 2 
 3                 Outlook.Items items = folder.Items;
 4                 string rstFilter = "";
 5                 try
 6                 {
 7                     rstFilter = string.Format("[Subject] like '%{0}%'", "会議");
 8                     items = items.Restrict(rstFilter);//此处报异常
 9                 }
10                 catch (Exception ex)
11                 {
12                     MessageBox.Show(this
13                                 , ex.Message + Environment.NewLine + rstFilter
14                                 , this.Name
15                                 , MessageBoxButtons.OK
16                                 , MessageBoxIcon.Error);
17                     return;
18                 }

 

异常:

     

 

原因:

    将属性名括在方括号内的写法叫做“Jet 筛选器”。在 Jet 查询中,只能对关键字属性进行短语匹配。 

    不能通过 Jet 查询进行开头或子字符串匹配即不支持like模糊查询

    为了克服使用 Jet 查询语法时关键字限制条件的局限性,请使用允许开头或子字符串限制条件的 DASL 语法。

 

解决:

    使用与 Keywords 属性的比较筛选项目

    将筛选器字符串改为如下:

rstFilter = string.Format("@SQL=http://schemas.microsoft.com/mapi/proptag/0x0037001f ci_phrasematch '{0}' ", "会議");

  

详情:

    Docs / Office VBA 参考 / Outlook / 操作说明主题 / 搜索和筛选 / 筛选 / 概述

 

其中使用DASL语法时,命名空间相关介绍:

    Docs / Office VBA 参考 / Outlook / 操作说明主题  / 导航 / 属性概述 / 按命名空间引用属性

 

posted @ 2020-05-21 10:47  King様  阅读(725)  评论(0编辑  收藏  举报