Concat,Concatenate,TextJoin,都返回“ #NAME?”

时间:2018-07-11 13:57:46

标签: excel openpyxl

所以我有这个简单的代码,应该将公式插入到单元格中:

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?

enter image description here

单元格C1中的公式检出,如果我选择该单元格并按Enter键或双击它,然后单击外部,则显示正确的结果; 我也尝试过但仍然没有运气:

ws['C1'].set_explicit_value("=CONCAT(A1,B1)","f")

2 个答案:

答案 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()代替!