2015-02-01 2 views
3

Что не так с этим кодом? Почему win32com.client.constants не имеет атрибута wdWindowStateMinimize?Как использовать win32com.client.constants с MS Word?

>>> import win32com.client 
>>> w=win32com.client.Dispatch("Word.Application") 
>>> w.WindowState = win32com.client.constants.wdWindowStateMinimize 
Traceback (most recent call last): 
    File "<pyshell#2>", line 1, in <module> 
    w.WindowState = win32com.client.constants.wdWindowStateMinimize 
    File "C:\Python34\lib\site-packages\win32com\client\__init__.py", line 170, in __getattr__ 
    raise AttributeError(a) 
AttributeError: wdWindowStateMinimize` 

ответ

2

Вы должны использовать EnsureDispatch вместо:

>>> w=win32com.client.gencache.EnsureDispatch('Word.Application') 
>>> win32com.client.constants.wdWindowStateMinimize 
2 
>>> 

Обратите внимание, что в первый раз вы используете EnsureDispatch на конкретном COM-сервер, pywin32 создает COM тип Библиотека для него (Word в вашем случае), так это может занять много секунд. Для Excel потребовалось почти 30 секунд. Но после этого отправка будет быстрой, и вы даже можете использовать обычный Dispatch (чтобы вы могли закодировать приложение для использования Dispatch, что быстрее, чем EnsureDispatch, и проверить, определена ли константа, а если нет, то код использует EnsureDispatch).

Для получения более подробной информации см. my answer to this other post.

+0

Привет, теперь у меня есть проблема с распространением моей программы с другими пользователями. Программа превращается в exe-формат с модулем cx_Freeze. Он отлично работает на моем ПК, но вызывает ошибки у других. Можете ли вы дать мне совет, пожалуйста? – ssssergey

+0

@ssssergey Пожалуйста, напишите отдельный вопрос. – Schollii