Как вызвать python script на excel vba?
пытается вызвать python script на Vba, и я новичок. Я попытался преобразовать главный script в exe, используя py2exe, а затем вызвал его из VBA (shell), но главный script вызывает другие скрипты, поэтому он становится сложным, и я испортил его (мой exe не работает). Кроме того, основной script - большой файл, и я не хочу его много пересматривать.
Bottomline, есть способ вызвать основной script из excel vba, не преобразовывая script в exe файл.
До сих пор я пробовал:
RetVal = Shell("C:\python27\python.exe " & "import " & "C:\\" & "MainScriptFile")
Он запускает файл python.exe, но ничего не делает. Затем я попробовал:
RetVal = Shell("C:\Windows\System32\cmd.exe " & "python " & "C:\\Python27\\hello.py")
Он запускает командную строку, но даже не запускает python.
P.S. Я проверил все связанные вопросы на форуме, они не решают мою проблему.
Ответы
Ответ 1
Попробуйте следующее:
RetVal = Shell("<full path to python.exe> " & "<full path to your python script>")
Или, если python script находится в той же папке, что и рабочая книга, вы можете попробовать:
RetVal = Shell("<full path to python.exe> " & ActiveWorkBook.Path & "\<python script name>")
Все данные в пределах <>
должны быть указаны. <>
- указывает сменные поля
Я думаю, это должно сработать. Но опять же, если ваш script собирается вызывать другие файлы, находящиеся в разных папках, это может привести к ошибкам, если только ваш script не обработал его. Надеюсь, что это поможет.
Ответ 2
Существует несколько способов решения этой проблемы.
Pyinx - довольно легкий инструмент, который позволяет вам вызывать Python с использованием пространства процесса excel
http://code.google.com/p/pyinex/
Я использовал этот один несколько лет назад (когда он активно развивался), и он работал довольно хорошо
Если вы не против платить, это выглядит довольно хорошо
https://datanitro.com/product.html
Я никогда не использовал его, хотя
Хотя, если вы уже пишете на Python, возможно, вы можете полностью удалить excel и сделать все на чистом питоне? Гораздо проще поддерживать одну базу кода (python), а не 2 (python + все, что у вас есть).
Если вам действительно нужно выводить ваши данные в excel, есть даже некоторые неплохие инструменты для Python. Если это может работать лучше, дайте мне знать, и я получу ссылки.
Ответ 3
Вы также можете попробовать ExcelPython, который позволяет вам манипулировать объектом Python и кодом вызова из VBA.
Ответ 4
Попробуйте следующее:
retVal = Shell("python.exe <full path to your python script>", vbNormalFocus)
замените <full path to your python script>
на полный путь