将 Access 表单上命令按钮的参数传递给 python 脚本
Posted
技术标签:
【中文标题】将 Access 表单上命令按钮的参数传递给 python 脚本【英文标题】:Pass argument from command button on Access form to python script 【发布时间】:2015-06-12 23:42:31 【问题描述】:使用 Access 2010 和 python 2.7.8
在 Access 2010 表单上有一个命令按钮。我正在尝试从 Field1 文本框中提取值并将其传递给 python 脚本。我正在努力传递变量。注释掉的东西是我尝试过的其他东西。
Field1 文本框中的值为:
C:\\tests\\Project
命令按钮后面的 VBA:
Private Sub Command0_Click()
arg1 = """" & Field1 & """"
'arg1 = Field1
Debug.Print arg1
'Call Shell("C:\\Python27\\ArcGIS10.3\\python.exe " & "C:\\tests\\Test.py " & "C:\\tests\\Project", vbNormalFocus)
Call Shell("C:\Python27\ArcGIS10.3\python.exe " & "C:\tests\Test.py " & arg1, vbNormalFocus)
End Sub
Python 代码是:
import os.path
#fp = "C:\\tests\\Projects"
fp = argv[1]
os.makedirs(fp)
【问题讨论】:
【参考方案1】:在 Python 中尝试以下操作
# should be sys.argv[1]
sys.argv[1]
你可能想利用 os.path.join 来确定你的 makedirs 的去向
import os
import sys
sys.argv[1]
fp = r'c:\test'
os.makedirs(os.path.join(fp,sys.argv[1]))
Excel 中的 VBA - 适合我...
Private Sub test()
arg1 = Range("A1").Value
Debug.Print arg1
Call Shell("""C:\Python27\python.exe"" " & """c:\test\test.py"" " & """arg1""", vbNormalFocus)
End Sub
【讨论】:
不,这不起作用。命令按钮正在执行 python 脚本,但参数仍未被传递或识别。 命令 fp = r'c:\test' 似乎没有做任何事情,因为 argv[1] 传递了整个路径名。我将其更改为 fp = r'c:\monkey' 并且程序仍然运行并且没有创建名为 monkey 的目录。这个命令的意图是什么?否则,您的建议确实有效。我不知道为什么上周末没有。也许我在我的代码中遗漏了一些东西。 r'c:\test' r 表示它是一个原始文字字符串,'\' 等被视为反斜杠。否则 \t \n \r 可能读作制表符、换行符或回车符...但是如果您传递的是字符串,那真的没关系...【参考方案2】:感谢 Superfly。需要将 sys 导入 python 脚本并使 fp=sys.argv[1]。
访问 VBA
Private Sub Command0_Click()
argv1 = Field1.Value
Debug.Print argv1
Call Shell("C:\Python27\ArcGIS10.3\python.exe " & "C:\tests\Test.py " & argv1, vbNormalFocus)
End Sub
Python
import os.path
import sys
fp = sys.argv[1]
os.makedirs(fp)
【讨论】:
以上是关于将 Access 表单上命令按钮的参数传递给 python 脚本的主要内容,如果未能解决你的问题,请参考以下文章
从 DoCmd.OpenReport 将参数传递给 Access 2010 报告