我已经尝试过这篇文章:How to call python script on excel vba?
这篇文章:Run and execute a python script from VBA
这篇文章:How can I call python program from VBA?
但是没有一个答案适合我,我不知道我做错了什么。问题1:我想从VBA excel运行pythonscript。 excel文件没有主页(可以在任何桌面上)。我希望使用的代码:
Dim Ret_Val
Ret_Val = Shell("C:\python27\python.exe \\10.31.13.22\SharedDocs\3 - Technical\13 - Reports & Templates\13 - Description\DescriptionToDatabase.py")
pythonfile在服务器上始终具有相同的路径。我在这里看不到扫管笏是错的?我得到的只是一个黑色的蟒蛇屏幕。
在python文件中,我调用工作簿和正确的工作表:
book = xlrd.open_workbook("//10.31.13.22/SharedDocs/3 - Technical/1 - Projects/0 - Internal/RPA 138 - Engineering software/testchipdescription/upload to database/testchipdescription-template-10-11.xltm")
sheet = book.sheet_by_name("Database")
目前excel工作簿路径在python中是硬编码的。这将带我回到问题2:我可以将excel工作簿的名称和路径以某种方式传递给我的pythonscript吗?
编辑:
我在命令提示符下尝试了shell()代码。 与VBA相同:
"C:\python27\python.exe \\10.31.13.22\SharedDocs\3 - Technical\13 - Reports & Templates\13 - Description\DescriptionToDatabase.py"
它不起作用。 '系统无法找到指定的路径'。
我试过这个:
C:\python27\python.exe "\\10.31.13.22\SharedDocs\3 - Technical\13 - Reports & Templates\13 - Description\DescriptionToDatabase.py"
它有效!所以cmd需要""处理路径中的空格。但是我不能在VBA中添加它们,因为我不能放置2""否则就是错误。
答案 0 :(得分:1)
是的,我找到了问题1的解决方案:
Dim excelToPython As String
excelToPython = """C:\python27\python.exe"" ""\\10.31.13.22\SharedDocs\3 - Technical\13 - Reports & Templates\13 - Description\DescriptionToDatabase.py"""
Debug.Print excelToPython
Call Shell(excelToPython)
感谢'Allan Browne'(https://bytes.com/topic/access/answers/520558-problem-shell-space-file-name)
编辑:
最后,我找到了问题2的解决方法。我仍然没有真正的解决方案,使用shell命令将活动工作簿的名称和路径提供给我的python脚本。
但是我将活动工作簿的路径和名称写在与我的python脚本相同的文件夹中的txtfile中。然后我用pythonscript et voila获取这些信息..它有效!嗯,它做我想要的,但它不是一个干净的解决方案。如果有人知道正确的解决方案,请随时分享:o)
我的解决方案解决方案:
vba-excel中的代码:
'via pythonscript'
Dim excelToPython As String
Dim myFileTxt As String
Dim fileTxtPath As String
'first give the name and path of active workbook to a txtfile in the same folder as ThemeColor pythonscript'
fileTxtPath = "\\10.31.13.22\SharedDocs\3 - Technical\13 - Reports & Templates\13 - Description\actWBdb.txt"
myFile = FreeFile
Open fileTxtPath For Output As myFile
nameWB = ActiveWorkbook.name
pathWB = ActiveWorkbook.path
Print #myFile, nameWB
Print #myFile, pathWB
Close myFile
'run the python file'
excelToPython = """C:\python27\python.exe"" ""\\10.31.13.22\SharedDocs\3 - Technical\13 - Reports & Templates\13 - Description\DescriptionToDatabase.py"""
Call Shell(excelToPython)
python中的代码:
filepath ='//10.31.13.22/SharedDocs/3 - Technical/13 - Reports & Templates/13 - Description/actWBdb.txt'
lines = open(filepath).read().splitlines()
nameWorkbook = lines[0]
pathWorkbook = lines[1]
book = xlrd.open_workbook(pathWorkbook + '/' + nameWorkbook)
sheet = book.sheet_by_name("Database")
答案 1 :(得分:0)
我想知道是否可以将活动excel工作簿的名称和路径提供给我从此活动工作簿调用的python脚本?
是。 You can pass argument(s) to SHELL
function from VBA,然后你需要修改你的python脚本来接受参数,并用它/它们做一些事情。