尝试在 outlook 中调用 .GetFirst() 函数时出现 win32com 问题
Problem with win32com while trying to call .GetFirst() function in outlook
我使用 win32com 库与 outlook 交互,看不到异常出现与其他东西之间的关系。并非每次我 运行 代码都会出现异常。如果您给我一些链接以明确有关此库的文档或尝试帮助我解决问题,我将不胜感激
Exception appeared: (-2147023170, 'The remote procedure call failed.', None, None)
Traceback (most recent call last):
File "C:/.../sources/main.py", line 60, in main
logger=logger)
File "Outlook_API_v1.py", line 142, in save_mail
message = messages.GetFirst()
File "C:\...\AppData\Local\Temp\gen_py.7[=10=]062FFF-0000-0000-C000-000000000046x0x9x6\_Items.py", line 53, in GetFirst
ret = self._oleobj_.InvokeTypes(86, LCID, 1, (9, 0), (),)
pywintypes.com_error: (-2147023170, 'The remote procedure call failed.', None, None)
RPC_S_CALL_FAILED
通常意味着 out-of-proc COM 服务器(在您的情况下为 Outlook.Application
)在您的代码 运行.
时关闭
Outlook 可能不会在满足您需求的内存中挂起。进程可以关闭。在这种情况下,您可能会在代码中看到所描述的错误。
为防止这种情况发生,我建议向 Explorers
集合中添加一个新的 Explorer
实例,并在完成之前保持其全部活动。 Explorers.Add 方法创建资源管理器的新实例 window。不要担心 window,资源管理器 window 最初是隐藏的。如果需要,您必须调用 Explorer
对象的 Display
方法使其可见。例如,以下 VBA 代码显示了如何使用此方法:
Sub DisplayDrafts()
Dim myExplorers As Outlook.Explorers
Dim myOlExpl As Outlook.Explorer
Dim myFolder As Outlook.Folder
Set myExplorers = Application.Explorers
Set myFolder = Application.GetNamespace("MAPI").GetDefaultFolder(olFolderDrafts)
Set myOlExpl = myExplorers.Add(myFolder, olFolderDisplayNoNavigation)
myOlExpl.Display
End Sub
注意,Outlook 是单例的。如果您尝试在用户使用该应用程序时将其自动化然后关闭它,您可能会陷入相同的场景。
我使用 win32com 库与 outlook 交互,看不到异常出现与其他东西之间的关系。并非每次我 运行 代码都会出现异常。如果您给我一些链接以明确有关此库的文档或尝试帮助我解决问题,我将不胜感激
Exception appeared: (-2147023170, 'The remote procedure call failed.', None, None)
Traceback (most recent call last):
File "C:/.../sources/main.py", line 60, in main
logger=logger)
File "Outlook_API_v1.py", line 142, in save_mail
message = messages.GetFirst()
File "C:\...\AppData\Local\Temp\gen_py.7[=10=]062FFF-0000-0000-C000-000000000046x0x9x6\_Items.py", line 53, in GetFirst
ret = self._oleobj_.InvokeTypes(86, LCID, 1, (9, 0), (),)
pywintypes.com_error: (-2147023170, 'The remote procedure call failed.', None, None)
RPC_S_CALL_FAILED
通常意味着 out-of-proc COM 服务器(在您的情况下为 Outlook.Application
)在您的代码 运行.
Outlook 可能不会在满足您需求的内存中挂起。进程可以关闭。在这种情况下,您可能会在代码中看到所描述的错误。
为防止这种情况发生,我建议向 Explorers
集合中添加一个新的 Explorer
实例,并在完成之前保持其全部活动。 Explorers.Add 方法创建资源管理器的新实例 window。不要担心 window,资源管理器 window 最初是隐藏的。如果需要,您必须调用 Explorer
对象的 Display
方法使其可见。例如,以下 VBA 代码显示了如何使用此方法:
Sub DisplayDrafts()
Dim myExplorers As Outlook.Explorers
Dim myOlExpl As Outlook.Explorer
Dim myFolder As Outlook.Folder
Set myExplorers = Application.Explorers
Set myFolder = Application.GetNamespace("MAPI").GetDefaultFolder(olFolderDrafts)
Set myOlExpl = myExplorers.Add(myFolder, olFolderDisplayNoNavigation)
myOlExpl.Display
End Sub
注意,Outlook 是单例的。如果您尝试在用户使用该应用程序时将其自动化然后关闭它,您可能会陷入相同的场景。