使用xlwings时出错:RunFrozenPython+;论据

使用xlwings时出错:RunFrozenPython+;论据,python,vba,xlwings,Python,Vba,Xlwings,由于模块xlwings,我能够连接Excel和Python,例如,我使用以下代码从print.py调用函数,使用一个参数,在本例中是数据文件的路径: RunPython ("import print; print.print_vars(r'" & fullpath & "')") 现在,我用Python代码构建了一个冻结的模块,我想调用冻结的版本(保存在同一文件夹\dist\print\print.exe中),也使用如上所示的参数 我试过: RunFrozenPython (T

由于模块xlwings,我能够连接Excel和Python,例如,我使用以下代码从print.py调用函数,使用一个参数,在本例中是数据文件的路径:

RunPython ("import print; print.print_vars(r'" & fullpath & "')")
现在,我用Python代码构建了一个冻结的模块,我想调用冻结的版本(保存在同一文件夹\dist\print\print.exe中),也使用如上所示的参数

我试过:

RunFrozenPython (ThisWorkbook.Path & "\dist\spss_print\spss_print.exe", "r'" & fullpath & "'")
这将直接在VBA模块中提示错误(应为:=)

以及:

RunFrozenPython (ThisWorkbook.Path & "\dist\print\print.exe r'" & fullpath & "'")
这将导致运行宏时出现错误消息(输入的行太长)

我已经看过github()中的数据库示例,但它没有将参数与冻结的模块一起使用。来自的指令表明另一个代码也不起作用

有人能告诉我如何在VBA模块中重新编写调用吗?
感谢您的帮助。

以下是一个工作示例:

import xlwings as xw
import sys


def hello_xlwings(arg1, arg2):
    wb = xw.Book.caller()
    wb.sheets[0].range("A1").value = arg1 + arg2


if __name__ == '__main__':
    hello_xlwings(sys.argv[1], sys.argv[2])
然后在冻结后,从VBA中这样称呼它:

RunFrozenPython "C:\path\to.exe", "arg1 arg2"

以下是一个工作示例:

import xlwings as xw
import sys


def hello_xlwings(arg1, arg2):
    wb = xw.Book.caller()
    wb.sheets[0].range("A1").value = arg1 + arg2


if __name__ == '__main__':
    hello_xlwings(sys.argv[1], sys.argv[2])
然后在冻结后,从VBA中这样称呼它:

RunFrozenPython "C:\path\to.exe", "arg1 arg2"

哎哟,上次更新的文档没有正确更新(虽然有提到)。将在下一版本中修复。使用
RunFrozenPython“C:\path\to.exe”,“arg1 arg2”
Hello Felix,谢谢,有了这段代码,我可以运行代码和Python exe脚本。但是,我没有找到一种方法来使用python脚本的参数。我写了一个简单的函数(当只调用这个函数时,这里什么都不会发生),然后我尝试添加一行代码来运行这个函数,其中包含两个参数,但并没有找到这两个参数。。。您能否提供一些示例,说明在使用冻结模块时如何使用参数?感谢您在下面提供了一个完整的示例,这些文档在最近的更新中没有正确更新(尽管提到了它)。将在下一版本中修复。使用
RunFrozenPython“C:\path\to.exe”,“arg1 arg2”
Hello Felix,谢谢,有了这段代码,我可以运行代码和Python exe脚本。但是,我没有找到一种方法来使用python脚本的参数。我写了一个简单的函数(当只调用这个函数时,这里什么都不会发生),然后我尝试添加一行代码来运行这个函数,其中包含两个参数,但并没有找到这两个参数。。。您能否提供一些示例,说明在使用冻结模块时如何使用参数?thanks在下面提供了一个完整的示例Belowello Felix,感谢这一行代码,我还没有遇到这个。我仍然收到一个错误,但我认为这可能是由Excel/VBA引起的:在我的示例中,我从2个单元格中读取2个参数作为数字(双精度),然后运行与您的示例非常接近的Python代码(对参数进行一些更改,然后将其写入工作簿中的两个单元格)。我收到以下错误:[1568]无法执行脚本testargs_Freeze ValueError:以10为基数的int()的文本无效:“arg1”对此有何看法?它在非冻结版本中运行良好。当您将参数传递给命令行可执行文件(即冻结的python代码)时,参数将作为字符串到达。因此,您需要确保通过在它们周围添加
float()
int()
来将它们转换为数字。是的,这已经作为“检查”非冻结版本中的数据,我将两个参数都转换为int()…您好Felix,感谢这一行代码,我还没有遇到这个问题。我仍然收到一个错误,但我认为这可能是由Excel/VBA引起的:在我的示例中,我从2个单元格中读取2个参数作为数字(双精度),然后运行与您的示例非常接近的Python代码(对参数进行一些更改,然后将其写入工作簿中的两个单元格)。我收到以下错误:[1568]无法执行脚本testargs_Freeze ValueError:以10为基数的int()的文本无效:“arg1”对此有何看法?它在非冻结版本中运行良好。当您将参数传递给命令行可执行文件(即冻结的python代码)时,参数将作为字符串到达。因此,您需要确保通过在它们周围添加
float()
int()
来将它们转换为数字。是的,这已经作为“检查”非冻结版本中的数据,我将两个参数都转换为int()。。。