Как получить топ X элементов в активной папке на основе текущего представления - PullRequest
0 голосов
/ 09 июля 2019

Я хотел бы найти способ получения первых X (скажем, 10) почтовых элементов в текущей папке на основе порядка сортировки и фильтров, которые пользователь мог применить.

Основная проблема заключается в том, чтоКоллекция Items папки дает все почтовые элементы в порядке дат, и нет очевидного способа сортировки и фильтрации коллекции на основе текущего представления.

Sub foo()

    Dim i As Long
    Dim objFolder As Outlook.Folder
    Dim objItem As Outlook.MailItem

    Set objFolder = Outlook.Application.ActiveExplorer.CurrentFolder

    For i = 1 To 10
        Set objItem = objFolder.Items(i)
        Debug.Print objItem.Subject
    Next i

End Sub

Было бы замечательно, если бы кто-то указал мне направильные места в объектной модели Outlook, чтобы я мог достичь этого.

1 Ответ

0 голосов
/ 09 июля 2019

Вы находитесь на правом проспекте.Существует разница между представлением и коллекцией Items, которую вы пытаетесь использовать в коде.

Чтобы применить фильтр к пользовательскому интерфейсу, необходимо использовать следующую последовательность вызовов свойств и методов:

Explorer.CurrentView.SortFields

Свойство CurrentView класса Explorer или Folder возвращает объект, представляющий текущее представление.Объект View позволяет создавать настраиваемые представления, которые позволяют лучше сортировать, группировать и в конечном итоге просматривать данные всех типов.Существует множество различных типов представлений, которые обеспечивают гибкость, необходимую для создания и обслуживания ваших важных данных.Представления определяются и настраиваются с использованием свойства XML объекта View.Свойство XML позволяет создавать и настраивать настраиваемую схему XML, которая определяет различные функции представления.

Свойство View.Filter возвращает или задает строковое значение, представляющее фильтр для представления.Значением этого свойства является строка в синтаксисе поиска и локализации DAV (DASL), которая представляет текущий фильтр для представления.Для получения дополнительной информации об использовании синтаксиса DASL для фильтрации элементов в представлении см. Фильтрация элементов .

Кроме того, вы можете привести объект View к TableView и использовать его свойства дляобнаружение механизмов сортировки.Свойство SortFields возвращает объект OrderFields , представляющий набор полей, по которым упорядочиваются элементы, отображаемые в объекте TableView.

Итак, вы можете применить полученный фильтр к коллекции Items, чтобы получить правильный порядок.Или наоборот, чтобы установить порядок в пользовательском интерфейсе Outlook.

Private Sub FilterViewToLastWeek()  
 Dim objView As View 
 ' Obtain a View object reference to the current view.  
 Set objView = Application.ActiveExplorer.CurrentView 
 ' Set a DASL filter string, using a DASL macro, to show  
 ' only those items that were received last week.  
 objView.Filter = "%lastweek(""urn:schemas:httpmail:datereceived"")%" 
 ' Save and apply the view.  
 objView.Save  
 objView.Apply  
End Sub

Наконец, я бы предложил наблюдать свойство View.XML , которое возвращает или задает значение String, которое определяетXML-определение текущего представления.Определение XML описывает тип представления с использованием ряда тегов и ключевых слов, соответствующих различным свойствам самого представления.Когда представление создается, определение XML анализируется, чтобы отобразить параметры для нового представления.

Чтобы определить структуру XML при создании представлений, вы можете создать представление с помощью пользовательского интерфейса Outlook изатем вы можете получить свойство XML для этого представления.

...