将 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 报告

将命令行参数传递给 QPython

将 IPython 变量作为参数传递给 bash 命令

distutils:如何将用户定义的参数传递给 setup.py?

将命令行参数传递给python脚本[重复]

如何将从表单提交中检索到的参数作为参数传递给 django 中的函数