在Python中处理AdvancedSearchComplete事件

2024-10-01 02:38:51 发布

您现在位置:Python中文网/ 问答频道 /正文

所以我在用Python编写一个程序,它将遍历Excel电子表格,从中获取一个PO编号,并在我们的orders电子邮件帐户中搜索该PO编号。问题是,当我打印AdvancedSearch()方法返回的结果数时,它通常是零(但不总是-不一致)

我稍微研究了一下这个问题,似乎需要使用AdvancedSearchComplete事件来处理结果(我假设搜索通常在我尝试在代码中打印结果之前找不到结果,这就是为什么它不一致。)我尝试将代码设置为类似于此页中的代码:https://www.add-in-express.com/creating-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")

EDIT:我发现的一个建议是,如果在调用AdvancedSearch()之后运行任何代码,则不会触发AdvancedSearchComplete事件。我尝试在advanced\u search()中删除print语句,但没有任何改变


Tags: 代码comsearch事件编号pofolderswin32com