Итак, я пишу программу на 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 (), но это ничего не изменило.