Python XLwings在单元格中编写COUNTIF公式



我使用XLwings写在我的excel文件。我需要在excel的单元格中写正式的=COUNTIF(warnings!$F:$F;1)

我正在做以下事情,我的代码在添加overview_sheet.range('A9').formula = '=COUNTIF(warnings!$F:$F;1)'

之前工作正常
import xlwings as xw
...
wb = xw.Book(template)
ws = wb.sheets['warnings']
overview_sheet = wb.sheets['Overview']
overview_sheet.range('A9').formula = '=COUNTIF(warnings!$F:$F;1)'
...

错误如下:

Traceback (most recent call last):
File "C:/Users/XX/XXX/XXX/Main.py", line 109, in <module>
overview_sheet.range('A9').value = '=COUNTIF(warnings!$F:$F;1)'

如果我写一个简单的公式,如'=SUM(1;3)'它工作,但与我的COUNTIF公式不

我怎么写呢?

我不是Excel专家,所以你的公式可能是有效的,但对我来说,它不匹配COUNTIF函数语法=COUNTIF(),如果我只是将你的公式粘贴到单元格中,它被拒绝为不正确的公式。我使用您的代码输入到单元格中的任何'正确' =COUNTIF公式都可以正常工作。

然而,假设公式是你想要的;从几个测试看来,xlwings拒绝行,当它被确定为一个公式,即如果前面的'='存在,所以删除=允许公式写入没有错误的单元格,但当然不会做任何事情。
由于任何单元格中的公式都只是文本,因此在单元格中写入的替代方法是使用'.value'

overview_sheet.range('A9').value = '=COUNTIF(...)'
使用">

。值'而不是'。公式'允许公式写入没有错误,但Excel将其转换为文本通过放置一个单引号在前面,所以这可能是为什么你使用。formula.

下面可能是一种解决方法。
我不能确认它将绝对工作,因为正如所述Excel拒绝你的公式有不正确的语法。但是,如果它对您的工作表有效,您可以尝试使用xlwings单元格编辑功能并以这种方式写入单元格;
在公式前面放一个字符,它应该能够是Excel不会识别为另一个单元格函数的任何字符,我在示例中使用了"X"。这使得公式的编写没有错误。然后在下一行代码中,从单元格中删除第一个字符"X",留下您想要的公式。这应该再次完成,没有错误,然后可以保存工作表。

overview_sheet.range('A9').value = "X=COUNTIF(warnings!$F:$F;1)"
overview_sheet.range('A9').characters[0].api.Delete()

在我的工作表中,公式被Excel再次更改为文本

'=COUNTIF(warnings!$F:$F;1)

如果它是一个有效的公式在你的工作表,它可能不会被改变。

其他详细信息
刷新工作表(F9)

overview_sheet.api.Calculate()

将公式计算选项改为手动并返回到自动

wb.api.Calculation = -4135  # -4135 is xlCalculationManual 
wb.api.Calculation = -4105  # -4105 is xlCalculationAutomatic

最新更新