Table 对象或 Table 筛选器中不受支持的属性

本主题列出了无法添加到 Table 或无法在 Table 筛选器中使用的属性。 这些属性不能通过 Columns.Add 添加,也不能在下列方法所使用的筛选器中指定这些属性:

Properties Table 对象 Table 筛选器 注释
二进制属性 支持 不支持 如果通过引用命名空间的方式将二进制属性添加到 Table 中,则该属性在 Table 中的值为二进制值。 使用 Row.BinaryToString 将值转换为字符串。
正文属性,包括 BodyHTMLBodyhttps://schemas.microsoft.com/mapi/proptag/0x10130102
pidTagHtml) 的 (,https://schemas.microsoft.com/mapi/proptag/0x10090102PidTagRtfCompressed) 的 (
可支持 Body,但只能在 Table 中存储该值的前 255 个字节。 不支持代表 HTML 或 RTF 正文内容的其他属性。
由于只有前 255 字节的 Body 存储在表中,因此如果要获取文本或 HTML 形式的项目的完整正文内容,请使用 GetItemFromID 中的项的 EntryID 获取项对象。 然后,在整个项目对象中检索 Body 的完整值。
筛选器只支持以文本形式表示的 Body 属性。 这意味着属性必须在 DASL 筛选器中引用为 urn:schemas:httpmail:textdescription,并且不能筛选正文中的任何 HTML 标记。 为了提高性能,请在筛选器中使用内容索引器关键字来匹配正文中的字符串。
计算属性,如 AutoResolvedWinnerBodyFormat。 请参阅以下计算属性的完整列表。 不支持 不支持 要获取 Table 中某个项目的计算属性值,需在 GetItemFromID 中使用该项目的 EntryID 来获取项目对象。 然后通过 item 对象检索属性值。
多值属性,例如 CategoriesChildrenCompaniesVotingOptions 支持 虽然 Jet 和 DASL 筛选器都支持多值属性,但在 DASL 筛选器中使用内容索引可提高筛选效率。 有关详细信息,请参阅使用与 Keywords 属性的比较筛选项目 Table 中多值属性值的格式取决于该属性在添加时是使用显式内置名称,还是使用引用命名空间的名称。 如果属性是使用显式内置名称添加的,则 Table 中的值为逗号分隔的字符串。 否则,其值为变量数组。 有关详细信息,请参阅操作方法:访问 Table 中多值属性的值
返回值是对象的属性,如 AttachmentsParentRecipientsRecurrencePatternUserProperties 如果属性按其显式内置名称引用,则不支持;如果属性按其命名空间引用,则支持。 如果属性表示为 Jet 查询,则不支持;如果属性表示为 DASL 查询,则支持。

不支持的计算属性

如果尝试使用 Columns.Add 添加下面列出的计算属性之一,则通过显式属性名称或命名空间引用该属性时,将收到错误 ,IDS_ERR_BLOCKED_PROPERTY。 要确定这些属性的值,请使用"条目 ID"获取项目对象,然后使用项目对象来确定属性值(如 object.property 中所示):

如果尝试使用 Jet 筛选器中下面列出的计算属性之一, (通过 Table.Restrict 的显式属性名称引用属性) ,则会收到错误 ,IDS_ERR_ES_INVALIDRESTRICTION

注意对于 TaskSubjectIsMarkedAsTask 等计算属性,如果引用具有显式属性名称的属性,则不能使用 Columns.Add 将其添加到 Table.Add 或使用 Table.Restrict 对其进行筛选。 但是,如果通过命名空间引用属性,则可添加或筛选属性,如 Visual Basic for Applications 中的以下代码示例所示:

Sub TableForIsMarkedAsTask() 
    Dim oT As Outlook.Table 
    Dim oRow As Outlook.Row 
    Dim filter As String 
    '0x0E2B0003 represents IsMarkedAsTask 
    filter = "@SQL=" & Chr(34) _ 
    & "https://schemas.microsoft.com/mapi/proptag/0x0E2B0003" & Chr(34) & " = 1" 
    'Table only contains rows for items where IsMarkedAsTask is True 
    Set oT = Application.Session.GetDefaultFolder(olFolderInbox).GetTable(filter) 
    oT.Columns.Add ("TaskStartDate") 
    oT.Columns.Add ("TaskDueDate") 
    oT.Columns.Add ("TaskCompletedDate") 
    'Use GUID/ID to represent TaskSubject 
    oT.Columns.Add ( _ 
        "https://schemas.microsoft.com/mapi/id/{00062008-0000-0000-C000-000000000046}/85A4001E") 
    Do Until oT.EndOfTable 
        Set oRow = oT.GetNextRow 
        Debug.Print oRow( _ 
        "https://schemas.microsoft.com/mapi/id/{00062008-0000-0000-C000-000000000046}/85A4001E"), _ 
        oRow("TaskStartDate"), oRow("TaskDueDate"), oRow("TaskCompletedDate") 
    Loop 
End Sub

支持和反馈

有关于 Office VBA 或本文档的疑问或反馈? 请参阅 Office VBA 支持和反馈,获取有关如何接收支持和提供反馈的指南。