У меня есть скрипт на python, который вызывает открытие файла Excel, вызывает макрос в файле, а затем закрывает.Если я запускаю файл из CLI, он работает.Если я помещаю его в планировщик задач, я получаю сообщение об ошибке от win32com.
Метод открытия файла Excel:
import win32com.client as WinCom
if os.path.exists(reportGeneratorFileName):
try:
xl = WinCom.Dispatch("Excel.Application")
xl.Workbooks.Open(Filename=os.path.abspath(reportGeneratorFileName))
xl.Application.Visible = False
xl.Application.Run("'{}'!Runner.Runner".format(reportGeneratorFileName))
l.info('Start Sleeping')
# Async mode of pythonw causes this to finish before the file is made
time.sleep(300)
l.info('Done Sleeping')
xl.Application.Quit()
except Exception as e:
l.error('Error updating file')
l.error(e, exc_info=True)
Это ошибка, которую я получаю:
06/04/2018 06:56:19 AM ERROR: (-2146959355, 'Server execution failed', None, None)
Traceback (most recent call last):
File "LAW Report.py", line 846, in createReport
xl = WinCom.Dispatch("Excel.Application")
File "c:\python27\lib\site-packages\win32com\client\__init__.py", line 95, in Dispatch
dispatch, userName = dynamic._GetGoodDispatchAndUserName(dispatch,userName,clsctx)
File "c:\python27\lib\site-packages\win32com\client\dynamic.py", line 114, in _GetGoodDispatchAndUserName
return (_GetGoodDispatch(IDispatch, clsctx), userName)
File "c:\python27\lib\site-packages\win32com\client\dynamic.py", line 91, in _GetGoodDispatch
IDispatch = pythoncom.CoCreateInstance(IDispatch, None, clsctx, pythoncom.IID_IDispatch)
com_error: (-2146959355, 'Server execution failed', None, None)
Теперь я использую 64-битный Python 2.7 и 64-битный win32com, а офис 32-битный, но, как я сказал выше, если я просто запускаю скрипт из CLI, он работает нормально, но не из диспетчера задач.Я использую это на Windows Server 2012R2.Я попытался настроить задачу для 2008, 2008r2 и 2012r2.Я также пытался с самыми высокими привилегиями.Мне нужно, чтобы это работало независимо от того, вошел ли пользователь в систему или нет.Каждый раз, когда я проверял, пользователь вошел в систему.