Я поддерживаю Excel с макросами, которые загружают некоторые данные из inte rnet. Загрузка выполняется в пределах Python (я назову это Python A), сохраняется промежуточно и снова загружается Excel. Этот поток Python запускается макросом в этом Excel. Поскольку я должен делать это в c раз, я хотел автоматизировать это с помощью другого Python планировщика. Планировщик открывает «Ничего особенного», делал это раньше, по крайней мере, я так думал. Проблема, с которой я сейчас сталкиваюсь, заключается в том, что Python A не работает правильно при запуске из Python B. Макрос Excel работает нормально. Я знаю это, потому что некоторые файлы экспортируются, что также выполняется в макросе.
То, что я пробовал до сих пор:
- Запуск макроса вручную - это нормально
- Установка всех путей как абсолютные, но это уже имело место, так что здесь нечего улучшать.
- Вызов потока Python B из файла bat. Это работает (?!)
- Вызов летучей мыши из запланированного потока не работает работает
Код в VBA:
cmdLine = "python ""path_with_spaces_to_file"" "
lngResult = ShellAndWait(cmdLine, 0, vbNormalFocus, AbandonWait)
Код в Python B для вызова макроса:
import win32com.client
def func():
filename_excel = r"filename_to_excel_with_spaces.xlsm"
xl = win32com.client.DispatchEx('Excel.Application')
xl.Visible = False
xl.Workbooks.Open(Filename=filename_excel, ReadOnly=1)
sheet = xl.ActiveWorkbook.Sheets("Sheetname")
xl.Application.Run("Macroname")
xl.DisplayAlerts = False
xl.Application.Quit()
Как я вызываю эту функцию из планировщика:
subprocess.run(["python3_location.bat", "-c", 'from python_B_file import func; func()'],
stdout=subprocess.PIPE,
cwd=r"path_to_python_B_file",
universal_newlines=True,
timeout=60)
Я вижу дополнительное окно cmd появляется, но новый файл не загружен. Я не вижу сообщение об ошибке