excel Microsoft文档LAMBDA附加到定义的名称,这可以用Openpyxl创建吗?

9udxz4iz  于 2023-08-08  发布在  其他
关注(0)|答案(1)|浏览(108)

我有一个复杂的工作簿,我用Openpyxl生成。我决定修改公式,以使用Excel的所谓未来函数和数组函数。一些公式变得相当长,我能够使用新的LAMBDA函数附加到一个名称(在名称管理器中设置)。我能够从保存的工作簿中读取已定义的名称定义,但试图创建新的名称定义似乎会阻止Excel打开该文件(带有通用消息)。
Openpyxl文档中定义的名称只讨论了范围的集合。没有对lambda函数的引用。
在Excel的名称管理器的test_wb.xlsm中,我创建了一个名称DOB,并将“Refers to”字段设置为=LAMBDA(a,XLOOKUP(a,tbl_people[Initials],tbl_people[DOB]))
在Excel中,以下公式现在可以生成出生日期:DOB("VEC") .整齐。
下面的代码将创建一个损坏的工作簿

'''experiment with defined names'''
from openpyxl import load_workbook
from openpyxl.workbook.defined_name import DefinedName
wb=load_workbook('data/test_wb.xlsm')
dns=wb.defined_names
dob=dns['DOB']
d=DefinedName("XYZ",comment='test lambda',attr_text=dob.attr_text)
wb.defined_names.add(d)
wb.save("data/dn_book.xlsm")

字符串
我复制了XYZ下现有的已定义名称属性文本,以确保没有损坏公式。
我怀疑在当前的Openpyxl版本中不可能创建命名的lamda函数。这可以确认吗?

lqfhib0f

lqfhib0f1#

我意识到我没有用keep_vba=True打开源文件,并将输出命名为xlsm。这就是导致问题的原因,而不是openpyxl的任何问题。
事实上,我很高兴地说,只要你像这样使用_xlfn和_xlpm前缀,在定义的名称中放置一个lambda表达式作为引用似乎可以很好地工作:

_xlfn.LAMBDA(_xlpm.a,_xlfn.XLOOKUP(_xlpm.a,tbl_people[Initials],tbl_people[DOB]))

字符串

相关问题