[英]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.