从VBA(或命令行)启动Anaconda提示符

2024-05-29 05:41:12 发布

您现在位置:Python中文网/ 问答频道 /正文

到目前为止,我能够使用Excel VBA通过以下方式启动python脚本:

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测试一个新脚本,我的新脚本使用了我通过Anaconda导入的pyxlsb模块,因为我无法将该模块与常规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)

Anaconda上的python是3.7,而常规的python是3.5。我以以下方式使用pyxlsb引擎:

 pandas.read_excel(engine = "pyxlsb") 

如果我理解的话,它需要一个特定版本的Python,这是通过Anaconda提供给我的。这是在工作,所以我不能只是安装一个独立Python的不同版本,就像这样。那么,通过修改我目前已经存在的sub,基本上有没有可能通过VBA启动基于anaconda的python脚本呢?找不到能直接回答这个问题的答案

谢谢


Tags: 模块脚本middle方式corporateanacondavbamarket
2条回答

您需要首先启动虚拟环境。第二步是在虚拟环境中运行脚本。创建一个批处理文件,包括您需要执行的所有步骤,并通过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

给那些喜欢结论的人哈哈

我的.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脚本传递的变量值,在本例中为当前使用PC的用户的用户名

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”)允许我动态获取用户的用户名

我想我会分享,因为它可以帮助别人

相关问题 更多 >

    热门问题