使用python 2.7和openpyxl,我将IF公式插入引用其他工作表中字段的excel工作表。
虽然其他公式起作用(CONTIF,COUTN,SUM等),但我没有找到这种“简单”IF公式不起作用的原因。只有IF是问题
这是我的代码
for i in range(0,len(sortedWorkers)):
for a, rr in enumerate(dates):
row_nb = i + 3
coll = 3 + a
clmn_letter = get_column_letter(coll + 3)
# =IF(Worked!I$2=7;Worked!I3;"")
valFormula = '=IF(Worked!%s$2=7;Worked!%s%s;"")' %(clmn_letter,clmn_letter, str(row_nb))
_cl = ws12.cell(column= coll, row= row_nb, value=valFormula)
在评论中你可以看到公式。格式是正确的。如果我手动将其插入Excel中,它也可以工作。
字段坐标和所有内容都匹配。
有什么建议吗? 谢谢
答案 0 :(得分:2)
有时,XML中的公式序列化与GUI中显示的公式不同。它们可能有前缀,或者使用不同的单词,或者,我认为这可能就是这种情况,它们在参数之间使用不同的分隔符。在使用逗号作为小数分隔符的国家/地区,分号用于分隔GUI中的参数,但XML将使用逗号。
您可以通过查看Excel创建的文件来源进行检查。
答案 1 :(得分:0)
所以最后问题是,使用IF公式时,必须使用逗号“,”而不是分号“;”
注意,你必须使用英文名称作为函数,函数参数必须用逗号分隔,而不是用分号等其他标点符号。
答案 2 :(得分:0)
遇到了试图在公式中插入= IF语句的问题。
如上所述,您只需要使用逗号作为分隔符,并且只需在openpyxl中实现公式即可:
from openpyxl.utils import FORMULAE
print(FORMULAE)
此外,我发现使其与IF配合使用的唯一方法是使用以下语法影响公式:
worksheet [cell coords] .value =“ IF(condition,if true,if false)
例如(工作示例):
from openpyxl import Workbook
from openpyxl.utils import get_column_letter
wb = Workbook()
dest_filename = 'empty_book.xlsx'
ws1 = wb.active
ws1["A1"].value='=IF(1=1,"True","False")'
wb.save(filename = dest_filename)
希望会有所帮助。