从VBA(或命令行)启动Anaconda Prompt



到目前为止,我可以通过以下操作使用Excel VBA启动python脚本:

Sub ratesmarkup()
Ratespath = "python " & """Drive:LambdaLambdaLambdaLambdaPython Python Code.py"""
Cmd_Line = Shell("cmd.exe /S /K" & Ratespath & "&" & "exit", vbHide)
End Sub

直到现在,它一直运行得很好。我开始为一个新脚本使用Anaconda进行测试,我的新脚本使用了我通过Anaconda导入的pyxlsb模块,因为我无法将该模块与常规PyCharm一起使用。长话短说,我想知道如何修改这个脚本来启动Anaconda提示符,而不是常规的cmd.exe命令行。

当我将其发送到Anaconda Prompt时,它起作用:

python "Drive:LambdaLambdaLambdaLambdaPython Python Code.py"

但当我尝试从常规命令行启动它时,它在终端中给了我这个错误:

"ValueError: Unknown engine: pyxlsb"

然而,当我尝试安装上述pyxlsb模块时(尽管据我所知,我已经有了它(,它会说:

Requirement already satisfied: pyxlsb in c:pythonpython-3.5.1libsite-packages (1.0.6)

蟒蛇身上的蟒蛇是3.7,而普通蟒蛇是3.5。我以这种方式使用pyxlsb引擎:

pandas.read_excel(engine = "pyxlsb") 

如果我理解这需要一个特定版本的Python,它是通过Anaconda提供给我的。这是有效的,所以我不能像那样安装不同版本的独立Python。那么,基本上有没有任何可能的方法可以通过VBA通过修改我目前已经存在的子系统来启动基于anaconda的python脚本?找不到任何直接回答这个问题的东西。

谢谢!!

您需要首先启动虚拟环境。第二步是在虚拟环境中运行脚本。创建一个批处理文件,包括通过VB脚本执行和执行批处理文件所需的所有步骤。假设您的windows用户是TMF,而您的虚拟环境是myenv

批处理文件

@echo on
set root=C:UsersTMFAnaconda3
call %root%Scriptsactivate.bat %root%
call activate myenv
"C:UsersTMFAnaconda3envsmyenvpython.exe" "S:Market RiskMiddle OfficeCorporate TreasuryPolitique InvestissementPythonPCBONDS.py"
pause

致那些喜欢结论的人哈哈。

我的.bat文件最后看起来是这样的:

@ECHO ON
set root=C:Users%1%Anaconda3
call %root%Scriptsactivate.bat %root%
call activate "Drive:LambdaLambdaLambdaLambdaPython"
"Drive:LambdaLambdaLambdaLambdaPython Python Code.py"
PAUSE

其中"%1%"包含我将通过VBA脚本传递的变量的值,在本例中为当前使用PC的用户的用户名。

VBA脚本如下所示:

Sub VABONDS()
User = Environ("UserName")
batpath = "pushd " & """Drive:LambdaLambdaLambdaLambdaPython"""
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"(允许我动态地获取用户的用户名。

只是觉得我会分享,因为它可以帮助别人!!

最新更新