如果带引用的条件公式失败,则为openpyxl

时间:2016-09-30 11:26:48

标签: python excel openpyxl

使用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中,它也可以工作。

字段坐标和所有内容都匹配。

有什么建议吗? 谢谢

3 个答案:

答案 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)

希望会有所帮助。