尝试调用时win32com出现问题.outlook中的GetFirst()函数



我使用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:...AppDataLocalTemp9gen_py3.70062FFF-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)

Outlook可能不会在内存中挂断,以满足您的需求。该过程可以关闭。在这种情况下,您可能会在代码中看到所描述的错误。

为了防止这种情况发生,我建议向Explorers集合添加一个新的Explorer实例,并在完成之前保持其全部活动状态。探险家。Add方法创建资源管理器窗口的一个新实例。不要担心窗口,资源管理器窗口最初是隐藏的。如果需要,必须调用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是一个单例。如果你试图在用户使用应用程序时将其自动化,然后关闭它,你可能会陷入同样的情况。

RPC_S_CALL_FAILED通常意味着在代码运行时进程外的COM服务器(在您的案例中为Outlook.Application(已关闭。

相关内容

最新更新