Я поддерживаю Excel с макросом, который загружает некоторые данные из Интернета. Загрузка выполняется в Python (я буду называть это Python A), промежуточно сохраняется и снова загружается в Excel. Этот поток Python запускается макросом в этом Excel. Поскольку я должен делать это в определенное время, я хотел автоматизировать это с помощью другого планировщика 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, но новый файл не загружается. Я не вижу сообщения об ошибке