所以我有这个简单的代码,应该将公式插入到单元格中:
wb = Workbook()
ws = wb.create_sheet('General')
ws['A1'].value = 'Hello'
ws['B1'].value = 'World'
#Now cell C1 should display 'Hello World'
ws['C1'].value = "=CONCAT(A1,B1)"
#ws['C1'].value = "=CONCATENATE(A1,B1)"
#ws['C1'].value = "=TEXTJOIN(,,A1,B1)"
wb.save('Test.xlsx')
我已经手动输入了在Excel中输入的公式,它们起作用了,但是当通过openpyxl分配时,它们返回了#NAME?
单元格C1中的公式检出,如果我选择该单元格并按Enter键或双击它,然后单击外部,则显示正确的结果; 我也尝试过但仍然没有运气:
ws['C1'].set_explicit_value("=CONCAT(A1,B1)","f")
答案 0 :(得分:1)
问题在于OOXML规范仅涵盖原始发行版中的公式,而不适用于Microsoft在后续发行版中添加的公式。
您可以轻松地检查公式是否正确:
from openpyxl.utils.formulas import FORMULAE
'CONCAT' in FORMULAE
False
'CONCATENATE' in FORMULAE
True
'TEXTJOIN' in FORMULAE
False
为了使用最新的公式,这些公式必须以'_xlfn.'
为前缀。如果仍然存在问题,那么您将需要查看相关文件的XML源。
答案 1 :(得分:0)
.Value
属性显式设置范围的值...
如果您打算使用公式,则应改用.Formula
属性:
ws['C1'].Formula = "=CONCAT(A1,B1)"
应该产生预期的结果。感觉为什么这么简单。
编辑:
请注意,这将产生预期的结果“ HelloWorld
”,但是您似乎希望结果是“ Hello World
”。
要获得上述结果,请改用以下公式:
ws['C1'].Formula = "=CONCAT(A1, " ", B1)
最后但并非最不重要的一点是,如注释中正确提到的@tigeravatar,在较早的Excel版本中,使用公式=CONCATENATE()
代替!