筛选并高效枚举文件夹中的项
该示例演示如何使用 Table 对象筛选收件箱中带附件的项目,并高效枚举此类项目,以显示每个项目的所选属性。
示例
该代码示例指定使用 MAPI 命名空间的属性 PR_HASATTACH,并使用该属性在收件箱上的 GetTable 方法中创建初始筛选器。 项目类型的 Table 对象具有表示该项目类型的某些属性的默认列。 为自定义这些列,该示例首先对该 Table 的 Columns 集合调用 RemoveAll 方法,然后对 Columns 集合调用 Add 方法以添加使用内置属性名称的 EntryID、 Subject 和 ReceivedTime 属性,并且 ReceivedTime 列用于存储采用本地日期时间表示形式的值。
该示例然后再次调用 Columns.Add 以添加 ReceiveTime 属性,从而指定其 MAPI 命名空间,因此,该列会将值存储为协调世界时 (UTC) 日期时间值。 最后,此代码示例枚举 Table 中的每一项,同时显示指定为表列的四个属性的值。
如果使用 Visual Studio 测试此代码示例,必须先添加对 Microsoft Outlook 15.0 对象库组件的引用,并在导入 Microsoft.Office.Interop.Outlook 命名空间时指定 Outlook 变量。 不得将 Imports 或 using 语句直接添加到此代码示例中的函数前面,这两个语句必须后跟公共类声明。 下面的代码行演示了如何在 Visual Basic 和 C# 中执行导入和分配。
Imports Outlook = Microsoft.Office.Interop.Outlook
using Outlook = Microsoft.Office.Interop.Outlook;
Private Sub DemoTableColumns()
Const PR_HAS_ATTACH As String = _
"http://schemas.microsoft.com/mapi/proptag/0x0E1B000B"
' Obtain Inbox
Dim folder As Outlook.Folder = _
CType(Application.Session.GetDefaultFolder( _
Outlook.OlDefaultFolders.olFolderInbox), _
Outlook.Folder)
' Create filter
Dim filter As String = "@SQL=" & Chr(34) _
& PR_HAS_ATTACH & Chr(34) & " = 1"
Dim table As Outlook.Table = _
folder.GetTable(filter, _
Outlook.OlTableContents.olUserItems)
' Remove default columns
table.Columns.RemoveAll()
' Add using built-in name
table.Columns.Add("EntryID")
table.Columns.Add("Subject")
table.Columns.Add("ReceivedTime")
table.Sort("ReceivedTime", Outlook.OlSortOrder.olDescending)
' Add using namespace
' Date received
table.Columns.Add( _
"urn:schemas:httpmail:datereceived")
While Not (table.EndOfTable)
Dim nextRow As Outlook.Row = table.GetNextRow()
Dim sb As StringBuilder = New StringBuilder()
sb.AppendLine(nextRow("Subject").ToString())
' Reference column by name
sb.AppendLine("Received (Local): " _
& nextRow("ReceivedTime").ToString())
' Reference column by index
sb.AppendLine("Received (UTC): " & nextRow(4).ToString())
sb.AppendLine()
Debug.WriteLine(sb.ToString())
End While
End Sub
private void DemoTableColumns()
{
const string PR_HAS_ATTACH =
"http://schemas.microsoft.com/mapi/proptag/0x0E1B000B";
// Obtain Inbox
Outlook.Folder folder =
Application.Session.GetDefaultFolder(
Outlook.OlDefaultFolders.olFolderInbox)
as Outlook.Folder;
// Create filter
string filter = "@SQL=" + "\""
+ PR_HAS_ATTACH + "\"" + " = 1";
Outlook.Table table =
folder.GetTable(filter,
Outlook.OlTableContents.olUserItems);
// Remove default columns
table.Columns.RemoveAll();
// Add using built-in name
table.Columns.Add("EntryID");
table.Columns.Add("Subject");
table.Columns.Add("ReceivedTime");
table.Sort("ReceivedTime", Outlook.OlSortOrder.olDescending);
// Add using namespace
// Date received
table.Columns.Add(
"urn:schemas:httpmail:datereceived");
while (!table.EndOfTable)
{
Outlook.Row nextRow = table.GetNextRow();
StringBuilder sb = new StringBuilder();
sb.AppendLine(nextRow["Subject"].ToString());
// Reference column by name
sb.AppendLine("Received (Local): "
+ nextRow["ReceivedTime"]);
// Reference column by index
sb.AppendLine("Received (UTC): " + nextRow[4]);
sb.AppendLine();
Debug.WriteLine(sb.ToString());
}
}