2020年5月21日星期四

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

使用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(this13         , ex.Message + Environment.NewLine + rstFilter14         , this.Name15         , MessageBoxButtons.OK16         , 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 / 操作说明主题  / 导航 / 属性概述 / 按命名空间引用属性

 


没有评论:

发表评论