Запуск Anaconda Prompt из VBA (или из командной строки) - PullRequest
0 голосов
/ 22 апреля 2020

До сих пор я мог запускать свои python сценарии с помощью Excel VBA, выполняя что-то вроде этого:

Sub ratesmarkup()
Ratespath = "python " & """S:\Market Risk\Middle Office\Corporate Treasury\Politique Investissement\Python\JTD\Rates Markup.py"""
Cmd_Line = Shell("cmd.exe /S /K" & Ratespath & "&" & "exit", vbHide)
End Sub

, который до сих пор работал прекрасно. Я начал тестирование с использованием Anaconda для нового скрипта, и мой новый скрипт использует модуль pyxlsb, который я импортировал через Anaconda, поскольку я не мог использовать этот модуль с обычным PyCharm. Короче говоря, я хочу знать, как я могу изменить этот сценарий для запуска приглашения Anaconda вместо обычной командной строки cmd.exe.

Когда я запускаю это в приглашение Anaconda, оно работает:

python "S:\Market Risk\Middle Office\Corporate Treasury\Politique Investissement\Python\PCBONDS.py"

Но когда я пытаюсь запустить его из обычной командной строки, он выдаёт мне эту ошибку в терминале:

"ValueError: Unknown engine: pyxlsb"

Тем не менее, когда я пытаюсь установить упомянутый модуль pyxlsb (хотя у меня уже есть его мои знания), это говорит:

Requirement already satisfied: pyxlsb in c:\python\python-3.5.1\lib\site-packages (1.0.6)

python на Анаконде 3,7, в то время как обычный 3,5. Я использую движок pyxlsb следующим образом:

 pandas.read_excel(engine = "pyxlsb") 

Что, если я понял, требует определенной версии Python, которая предоставляется мне через Анаконду. Это на работе, поэтому я не могу просто установить другую версию автономной Python просто так. Итак, в принципе, есть ли какой-нибудь возможный способ запуска сценария python на основе anaconda через VBA путем изменения моего уже существующего саба? Не могу найти ничего, что отвечает на это напрямую.

Спасибо !!

Ответы [ 2 ]

0 голосов
/ 24 апреля 2020

Для тех, кто любит выводы лол.

Мой файл .bat в итоге выглядел так:

@ECHO ON
set root=C:\Users\%1%\Anaconda3
call %root%\Scripts\activate.bat %root%
call activate "S:\Market Risk\Middle Office\Corporate Treasury\Politique 
Investissement\Python"
"S:\Market Risk\Middle Office\Corporate Treasury\Politique 
Investissement\Python\python.exe" "S:\Market Risk\Middle Office\Corporate 
Treasury\Politique Investissement\Python\PCBONDS.py"
PAUSE

Где% 1% содержит значение переменной, которую я передам через мой VBA-скрипт, в данном случае имя пользователя пользователя, в настоящее время использующего P C.

Сценарий VBA выглядит следующим образом:

Sub VABONDS()
User = Environ("UserName")

batpath = "pushd " & """S:\Market Risk\Middle Office\Corporate Treasury\Politique 
Investissement\Python\"""
bathfile = "PCBONDS.bat "

Set CMD = VBA.CreateObject("WScript.Shell")
CMD.Run "cmd.exe /S /K" & batpath & "&" & bathfile & User & "&" & "exit", 
vbNormalFocus, True

End Sub

Где User = Environ ("UserName") позволяет мне получить имя пользователя пользователь динамически.

Просто думал, что поделюсь, как это может помочь другим !!

0 голосов
/ 22 апреля 2020

Вам необходимо запустить виртуальную среду первым. Второй шаг - запустить скрипт в виртуальной среде. Создайте командный файл, включающий все шаги, которые необходимо выполнить, и выполните командный файл с помощью своего VB-скрипта. скажем, ваш windows пользователь - TMF, а ваша виртуальная среда - myenv.

пакетный файл

@echo on
set root=C:\Users\TMF\Anaconda3
call %root%\Scripts\activate.bat %root%
call activate myenv
"C:\Users\TMF\Anaconda3\envs\myenv\python.exe" "S:\Market Risk\Middle Office\Corporate Treasury\Politique Investissement\Python\PCBONDS.py"
pause
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...