簡體   English   中英

Python XLwings 在單元格中編寫 COUNTIF 公式

[英]Python XLwings writing COUNTIF formula in a cell

我正在使用 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(<range>, <criteria>) 的 COUNTIF 函數語法不匹配,如果我只是將你的公式粘貼到單元格中,那就是被拒絕為不正確的公式。 我使用您的代碼輸入單元格的任何“正確”=COUNTIF 公式都可以正常工作。

但是,假設公式是您想要的; 從一些測試來看,當它被確定為公式時,xlwings 似乎會拒絕該行,即如果前面的“=”存在,因此刪除 = 允許將公式寫入單元格而不會出錯,但當然不會做任何事情.
由於任何單元格中的公式只是文本,因此寫入單元格的替代方法是使用“.value”

overview_sheet.range('A9').value = '=COUNTIF(...)'

使用 '.value' 而不是 '.formula' 可以正確編寫公式,但是 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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM