我有一个复杂的工作簿,我用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函数。这可以确认吗?
1条答案
按热度按时间lqfhib0f1#
我意识到我没有用
keep_vba=True
打开源文件,并将输出命名为xlsm
。这就是导致问题的原因,而不是openpyxl的任何问题。事实上,我很高兴地说,只要你像这样使用_xlfn和_xlpm前缀,在定义的名称中放置一个lambda表达式作为引用似乎可以很好地工作:
字符串