到目前为止,我可以通过执行以下操作来使用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 Prompt中启动它时,它会起作用:
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,而普通的是3.5。我以这种方式使用pyxlsb引擎:
pandas.read_excel(engine = "pyxlsb")
如果我了解需要特定版本的Python,可以通过Anaconda提供给我。这是在工作,所以我不能像这样安装不同版本的独立Python。因此,基本上是否有任何可能的方法,可以通过修改我目前已经存在的子程序,通过VBA启动基于anaconda的python脚本?无法找到直接回答此问题的方法。
谢谢!
答案 0 :(得分:0)
您需要首先启动虚拟环境。第二步是在虚拟环境中运行脚本。创建一个批处理文件,包括执行和通过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
答案 1 :(得分:0)
对那些喜欢结论的人大声笑。
我的.bat文件最终看起来像这样:
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
%1%存放我将通过VBA脚本传递的变量的值,在这种情况下,当前使用PC的用户的用户名。
VBA脚本如下:
public class CreateList(){
List<Object> myList = new ArrayList<>();
public List<Object> createList(){
myList.add();
myList.add();
....
....
return myList();
}
其中User = Environ(“ UserName”)允许我动态获取用户的用户名。
只是以为我会分享,因为它可以帮助别人!