首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PyXll : L1C1的范围,而不是A1:B2

PyXll : L1C1的范围,而不是A1:B2
EN

Stack Overflow用户
提问于 2020-10-29 15:28:28
回答 1查看 126关注 0票数 0

我安装了加载项PyXll,一切都可以正常工作。

我在excel中定义了一个函数来获取一个数组,这个函数在函数下面,我想在很多数组上重复使用这个函数,所以我想使用引用L1C1作为相对于函数的引用。

当我这样做时,我的函数在A1上:

代码语言:javascript
复制
xl = xl_app()
specific_range = xl.ActiveSheet.Range.("A2:B5")

效果很好!

但如果我这么做了

代码语言:javascript
复制
xl = xl_app()
specific_range = xl.ActiveSheet.Range("L(1)C(0):L(4)C(1)")

代码语言:javascript
复制
specific_range = xl.ActiveSheet.Range("L1C0:L4C1")

不工作!##com_error:(-2147352567,'Une exception s‘’est produite。),(0,None,0,-2146827284),

如何配置为具有引用L1C1?或者是另一种方式来获得我的结果?

非常感谢

EN

回答 1

Stack Overflow用户

发布于 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

例如,

代码语言:javascript
复制
from pyxll import xl_app

xl = xl_app()
caller = xl.Caller
specific_range = caller.GetOffset(1, 2)

您可以从左上角和右下角单元格构造一个范围,例如

代码语言:javascript
复制
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函数安排函数在完成计算后写入该范围。

您可以将范围传递到函数中。这是将这样的数据传递到函数中的一种更常见的方法。下面的文档应该会有所帮助

这样做的好处是,您不需要在代码中获得范围,您只需将其传递给函数,每次该范围内的值发生变化,您的函数就会被调用。

例如,你可以

代码语言:javascript
复制
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) 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64594265

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档