你能在服务器上运行的 xlwings 中制作一个 UDF 吗?

问题描述 投票:0回答:0

我正在玩 xlwings 服务器,我希望在此上下文中使用用户定义的函数。我一直在用 FastAPI 测试它,但对其他人开放。

我能够很好地遵循这个例子,让代码在我的测试服务器(本地主机)上运行,并对工作簿进行任何更改。这对我来说很有意义,因为我可能会让我的最终用户填写很多东西,然后点击“计算”按钮。

但是,我想做的是使用一个普通的(至少对最终用户来说看起来很普通)用户定义的函数,它实际上在服务器上进行处理。有时可以在 VBA 中完成所有处理代码,但即使是这样,代码管理也很烦人,必须将更新推送到数十个单独的 excel 文件,我更愿意只更新一次后端。

这是我到目前为止的工作:

@app.post("/test")
def test(request: Request):
    headers = request.headers
    val1 = int(headers['val1'])
    val2 = int(headers['val2'])
    return {"result":val1 + val2}

然后在 VBA 中我有这个:

Function testfunc(ByRef myVal As Integer, ByRef val2 As Integer) As Integer
    Dim d As Variant
    Set d = CreateObject("Scripting.dictionary")
    d.Add "val1", myVal
    d.Add "val2", val2
    testfunc = runremotepython("http://127.0.0.1:8000/test", exclude:="xlwings.conf", headers:=d)
End Function

然后我尝试进入 runremotepython 本身的代码(来自 xlwings)并设置它 以便它从服务器响应返回“结果”。这看起来很糟糕,因为我认为这个 xlwings 代码会定期重写,但只是为了在这里测试,它似乎暂时有效 - 调试

testfunc
显示它确实设置为我期望的值

即使这样,也不起作用。似乎

testfunc()
在自己身上运行循环?当我尝试正常运行单元格时,我收到来自 excel 的“一个或多个循环引用”警告。

如果有办法执行此标准,它可能不会破解 xlwings

runremotepython
代码...

python excel vba xlwings
© www.soinside.com 2019 - 2024. All rights reserved.