Обработка события AdvancedSearchComplete в Python - PullRequest
0 голосов
/ 26 июня 2019

Итак, я пишу программу на Python, которая будет проходить по электронной таблице Excel, получать из нее номер заказа и искать этот номер заказа в нашей учетной записи электронной почты. Проблема в том, что когда я печатаю количество результатов, возвращаемых методом AdvancedSearch (), оно обычно равно нулю (но не всегда - это противоречиво).

Я немного исследовал проблему, и похоже, что мне нужно обработать результаты, используя событие AdvancedSearchComplete. (Я предполагаю, что поиск обычно не находит результатов до того, как я пытаюсь напечатать их в своем коде, и поэтому он несовместим.) Я попытался настроить свой код аналогично коду на этой странице: https://www.add -in-express.com / creation-addins-blog / 2012/05/31 / outlook-search-csharp-vbnet / , но похоже, что событие AdvancedSearchComplete обрабатывается автоматически обработчиком событий в C # и VB.NET, но не в Python. Как я могу обработать это событие в Python?

import win32com
import win32com.client

outlook  = win32com.client.Dispatch("Outlook.Application")
namespace = outlook.GetNamespace("MAPI")
folders = namespace.Folders("orders@company.com")

def advanced_search(po, folders, outlook):
    scope = "'" + folders.Folders("Inbox").FolderPath + "','" + folders.Folders("Sent Items").FolderPath + "'"
    filter = "urn:schemas:httpmail:textdescription LIKE '%" + po + "%' OR urn:schemas:mailheader:subject LIKE '%" + po + "%'"
    search_subfolders = True
    tag = "This is a search"

    search = outlook.AdvancedSearch(scope, filter, search_subfolders, tag)

    print(search.Results.Count)

def Application_AdvancedSearchComplete(search):
    print("Advanced search completed")

РЕДАКТИРОВАТЬ: я обнаружил одно предложение, что событие AdvancedSearchComplete не сработает, если какой-либо код запускается после вызова AdvancedSearch (). Я попытался удалить оператор print в advanced_search (), но это ничего не изменило.

1 Ответ

0 голосов
/ 26 июня 2019

Вам необходимо подписаться на AdvancedSearchComplete класса Application (в вашем коде outlook).Простое вставление обработчика событий не будет работать из коробки.

...