所以我在用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语句,但没有任何改变
您需要订阅应用程序类的AdvancedSearchComplete(在代码中是
outlook
)。简单地粘贴事件处理程序是不可行的相关问题 更多 >
编程相关推荐