我安装了加载项PyXll,一切都可以正常工作。
我在excel中定义了一个函数来获取一个数组,这个函数在函数下面,我想在很多数组上重复使用这个函数,所以我想使用引用L1C1作为相对于函数的引用。
当我这样做时,我的函数在A1上:
xl = xl_app()
specific_range = xl.ActiveSheet.Range.("A2:B5")效果很好!
但如果我这么做了
xl = xl_app()
specific_range = xl.ActiveSheet.Range("L(1)C(0):L(4)C(1)")或
specific_range = xl.ActiveSheet.Range("L1C0:L4C1")不工作!##com_error:(-2147352567,'Une exception s‘’est produite。),(0,None,0,-2146827284),
如何配置为具有引用L1C1?或者是另一种方式来获得我的结果?
非常感谢
发布于 2021-01-28 11:52:45
向Python公开的Excel与您可能在VBA中使用的API相同。通常,如果您能够在VBA中找到您想做的事情,那么您可以将它转换为Python。来自PyXLL文档的以下页面应该会有进一步的帮助:https://www.pyxll.com/docs/userguide/vba.html。
要获得相对于当前函数的范围,可以使用Application.Caller属性:https://learn.microsoft.com/en-us/office/vba/api/Excel.Application.Caller
一旦有了调用范围,就可以使用偏移量属性获取相邻单元格:https://learn.microsoft.com/en-us/office/vba/api/Excel.Range.Offset
例如,
from pyxll import xl_app
xl = xl_app()
caller = xl.Caller
specific_range = caller.GetOffset(1, 2)您可以从左上角和右下角单元格构造一个范围,例如
xl = xl_app()
top_left = xl.Caller
bottom_right = caller.GetOffset(1, 2)
specific_range = xl.Range(top_left, bottom_right)另一件事是PYXLL下载中的"automation_example“示例中包含的"automation.py”函数。此示例使用类似但略有不同的方式获取调用单元格以下的范围,并使用PyXLL的async_call函数安排函数在完成计算后写入该范围。
您可以将范围传递到函数中。这是将这样的数据传递到函数中的一种更常见的方法。下面的文档应该会有所帮助
这样做的好处是,您不需要在代码中获得范围,您只需将其传递给函数,每次该范围内的值发生变化,您的函数就会被调用。
例如,你可以
from pyxll import xl_app
@xl_func("var[][]: str")
def test(values):
return str(values)
# In Excel...
# A1: =test(A2:B6)
# E1: =test(E2:F6) https://stackoverflow.com/questions/64594265
复制相似问题