com_error: (-2147221005, 'Недопустимая строка класса', Нет, Нет) - PullRequest
0 голосов
/ 17 июня 2020

Я пытаюсь подключиться к Outlook с помощью Python, но следующая строка выдает com_error

outlook = win32com.client.Dispatch("Outlook.Application").GetNamespace("MAPI")

Полная трассировка выглядит следующим образом:

    ---------------------------------------------------------------------------
com_error                                 Traceback (most recent call last)
c:\users\dipf5\appdata\local\programs\python\python37\lib\site-packages\win32com\client\dynamic.py in _GetGoodDispatch(IDispatch, clsctx)
     88                 try:
---> 89                         IDispatch = pythoncom.connect(IDispatch)
     90                 except pythoncom.ole_error:

com_error: (-2147221005, 'Invalid class string', None, None)

During handling of the above exception, another exception occurred:

com_error                                 Traceback (most recent call last)
<ipython-input-15-a96a5314c4a3> in <module>
----> 1 outlook = win32com.client.Dispatch("Outlook.Application").GetNamespace("MAPI")

c:\users\dipf5\appdata\local\programs\python\python37\lib\site-packages\win32com\client\__init__.py in Dispatch(dispatch, userName, resultCLSID, typeinfo, UnicodeToString, clsctx)
     93   """
     94   assert UnicodeToString is None, "this is deprecated and will go away"
---> 95   dispatch, userName = dynamic._GetGoodDispatchAndUserName(dispatch,userName,clsctx)
     96   return __WrapDispatch(dispatch, userName, resultCLSID, typeinfo, clsctx=clsctx)
     97 

c:\users\dipf5\appdata\local\programs\python\python37\lib\site-packages\win32com\client\dynamic.py in _GetGoodDispatchAndUserName(IDispatch, userName, clsctx)
    112         else:
    113                 userName = str(userName)
--> 114         return (_GetGoodDispatch(IDispatch, clsctx), userName)
    115 
    116 def _GetDescInvokeType(entry, invoke_type):

c:\users\dipf5\appdata\local\programs\python\python37\lib\site-packages\win32com\client\dynamic.py in _GetGoodDispatch(IDispatch, clsctx)
     89                         IDispatch = pythoncom.connect(IDispatch)
     90                 except pythoncom.ole_error:
---> 91                         IDispatch = pythoncom.CoCreateInstance(IDispatch, None, clsctx, pythoncom.IID_IDispatch)
     92         else:
     93                 # may already be a wrapped class.

com_error: (-2147221005, 'Invalid class string', None, None)

Любое предложение будет полезным.

1 Ответ

0 голосов
/ 17 июня 2020

Похоже, Outlook не может быть найден в системе. Обратите внимание: перед запуском кода вам необходимо установить Outlook.

Также не ясно, где и когда вы пытаетесь автоматизировать Outlook. В статье Соображения по серверной автоматизации Office говорится следующее:

Microsoft в настоящее время не рекомендует и не поддерживает автоматизацию приложений Microsoft Office из любых автоматических, не -интерактивное клиентское приложение или компонент (включая ASP, ASP. NET, DCOM и службы NT), поскольку Office может демонстрировать нестабильное поведение и / или взаимоблокировку при запуске Office в этой среде.

Если вы создаете решение, работающее на стороне сервера, вам следует попытаться использовать компоненты, которые были безопасны для выполнения в автоматическом режиме. Или вам следует попытаться найти альтернативы, которые позволяют запускать хотя бы часть кода на стороне клиента. Если вы используете приложение Office из серверного решения, у этого приложения не будет многих необходимых возможностей для успешной работы. Кроме того, вы рискуете стабильностью всего решения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...