У меня, по-видимому, довольно распространенная ошибка win32com, которую многие люди решали с помощью инициализации EnsureDispatch объекта com. Однако я все равно получаю ошибку атрибута. Даже после очистки содержимого папки gen_py.
def xl_com():
'''Returns a com object after testing if library for make-py is functional'''
for i in range(1,10):
print('starting com object')
try:
xl = win32com.client.gencache.EnsureDispatch('Excel.Application')
print('initialized through ensure dispatch')
except:
print('could not initialize com object lets try a different way')
xl = win32com.client.dynamic.Dispatch('Excel.Application')
print('initialized through dynamic dispatch')
try:
print('testing if libraries still there for com object')
xl.Name
print('success the libraries are there')
break
except:
print('looks like they are not there, deleting gen_py contents')
import email_functions
email_functions.clear_gen_py()
continue
return xl
From email_functions:
def clear_gen_py():
"""If there is an attribute err0r in win32
this function will clear the folder and try again"""
f_loc = 'C:\\Users\\MYUSERNAME\\AppData\\Local\\Temp\\gen_py'
for f in Path(f_loc).iterdir():
Path.unlink(f)
Path.rmdir(f_loc)
print('cleared %s hopefully that worked'%f_loc)
File "C: \ Users \ MYUSERNAME \ AppData \ Local \ Continuum \ anaconda3 \ lib \ site-packages \ win32com \ client \ Dynami c .py ", строка 527, в getattr raise AttributeError ("% s.% s "% (self. username , attr))
AttributeError: Excel.Application.Workbooks
Я использую win32com в anaconda. У меня будет пара дней, когда мне покажется, что я не получаю сообщение об ошибке, а затем это начнется снова. Объект com сохраняется как атрибут глобальной переменной. Он будет хорошо работать в течение пары дней, а затем снова начнет действовать.
Вчера я удалил и переустановил модуль pywin32 безрезультатно. Я знаю, что мне нужно изучить документацию, но работа очень занята. Кто-нибудь знает быстрое исправление?