从LibreCalc中调用python函数

从LibreCalc中调用python函数,python,function,add-in,user-defined-functions,libreoffice-calc,Python,Function,Add In,User Defined Functions,Libreoffice Calc,我在一个名为calculadora.py的文件中有以下代码 def calcpy(numA,numB): return numA+numB 从LibreCalc中调用函数calcpy()的正确方法是什么?比如说,我想把A1=calcpy(B1,C1)放在单元格中,然后得到结果 我已经将python脚本放在/usr/lib/libreoffice/share/Scripts/python/和/home/lucas/.config/libreoffice/4/user/Scripts/py

我在一个名为calculadora.py的文件中有以下代码

def calcpy(numA,numB):
    return numA+numB
从LibreCalc中调用函数calcpy()的正确方法是什么?比如说,我想把A1=calcpy(B1,C1)放在单元格中,然后得到结果

我已经将python脚本放在
/usr/lib/libreoffice/share/Scripts/python/
/home/lucas/.config/libreoffice/4/user/Scripts/python
中,我还可以在“工具”->“宏”->“组织宏”->“python”菜单下看到它

。。。但我真的不知道如何调用该函数

我读过一些帖子,其中建议将函数包装在Basic中,例如:

function calcpy(a as double, b as double) as double
    script = GetScript("calcpy")
    calcpy = script.invoke(Array(a, b), Array(), Array())
end function
。。。但每当我使用=calcpy(5,4)时,我都会得到一个错误:“基本运行时错误。未定义子过程或函数过程。”

这可能吗?使用Basic是正确的方法吗?有没有更直接(优雅?)的方法

谢谢


Lucas

这里有一个很好的答案:在您的情况下,基本代码应该是:

函数calcpy(a为双精度,b为双精度)为双精度
Dim scriptPro作为对象,myScript作为对象
scriptPro=ThisComponent.getScriptProvider()
myScript=scriptPro.getScript(_
“vnd.sun.star.script:calculadora.py$calcpy?language=Python&location=user”)
calcpy=myScript.invoke(数组(a,b),数组(),数组())
端函数
是的,有一种更直接/优雅的方式: