【问题标题】:Pass Python Argument Through VBA通过 VBA 传递 Python 参数
【发布时间】:2020-08-17 20:38:05
【问题描述】:

我编写了一个需要使用 VBA 调用的 python 脚本。我编写了一个 python 脚本,它可以解析一个 pdf,将我需要的数据存储在变量中,并写入一个预制的 excel 表以用这些值填充单元格。我已经成功地调用了该脚本并使用以下代码运行它:

Sub RunPythonScript()

'Declare Variables
Dim objShell As Object
Dim PythonExe, PythonScript As String

'Create a new Object shell.
Set objShell = VBA.CreateObject("Wscript.Shell")

'Provide file path to Python.exe
'USE TRIPLE QUOTES WHEN FILE PATH CONTAINS SPACES.
PythonExe = """C:\Python38\python.exe"""
PythonScript = "C:\Users\matthew_vidovic\Documents\dwf-python\fedExPDF.py"

'Run the Python Script
objShell.Run PythonExe & PythonScript

End Sub

对我来说,最后一步是能够从 VBA 而不是 python 脚本中传递一个 pdf 文件。 目前,在我的 python 脚本中,我打开一个 pdf 并使用以下代码将其存储为文本

raw = parser.from_file('nameofmyfile.pdf')
pdfText = raw['content']

而不是这样做,我希望能够从 vba 中更改正在分析的 pdf 文件,而不是通过更改 python 脚本。有没有办法让我从 vba 将参数传递给 python 脚本,参数是 pdf 文件的名称。我需要能够从 vba 更改 pdf 文件,然后由 python 脚本分析该文件。 这样的事情可能吗? 任何帮助将不胜感激。 干杯!

【问题讨论】:

  • 您的脚本可以从预制的 excel 中读取文件名吗?

标签: python excel vba


【解决方案1】:

确保您导入 sys 并在脚本中读取适当的 arg,然后在 VBA 调用中使用空格然后是参数,例如

test.py:

import sys

with open(f'C:/Users/User/OneDrive/Desktop/{sys.argv[1]}', 'w') as f:
    f.write(b'some text')

VBA:

    Sub RunPythonScript()
    
    'Declare Variables
    Dim objShell As Object
    Dim PythonExe, PythonScript As String
    
    'Create a new Object shell.
    Set objShell = VBA.CreateObject("Wscript.Shell")
    
    'Provide file path to Python.exe
    'USE TRIPLE QUOTES WHEN FILE PATH CONTAINS SPACES.
    PythonExe = """C:\Users\User\AppData\Local\Programs\Python\Python38\python.exe"""
    PythonScript = "C:\Users\User\OneDrive\Desktop\test.py"
    
    'Run the Python Script
    objShell.Run PythonExe & Chr$(32) & PythonScript & Chr$(32) & "Argument.txt"
    
    End Sub

【讨论】:

  • ? PythonExe 和 PythonScript 之间的空格?
  • @TimWilliams 我希望如此,但是,在我的测试用例中,当编码它时,它运行了。我想我会在其中编辑一个空间,谢谢,因为这就是我期望看到的方式。有趣的是它在这两种情况下都有效。
  • @QHarr - 我认为嵌入的双引号充当命令行分隔符。
  • @TimWilliams 好想法
  • @QHarr 是否可以运行存储在工作表单元格中的 python 脚本(比如 A1 的值 print('Hello World') 并且我需要从 VBA 运行该行?
猜你喜欢
  • 2022-12-10
  • 1970-01-01
  • 1970-01-01
  • 2013-02-11
  • 1970-01-01
  • 2022-01-25
  • 2014-05-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多