【发布时间】:2021-11-17 22:42:57
【问题描述】:
我想使用 Excel AVERAGE 公式来获取文件中列的平均值。我这样做是这样的:
font = Font(name="Calibri", bold=True)
ws.cell(100, 1).value = "Mean" # row 100 is the average row
ws.cell(100, 1).font = font
col_range = [2, 3, 4] # the columns to average
for col_index in col_range:
cell = ws.cell(100, col_index)
* cell.value = f"=AVERAGE({cell.column_letter}2:{cell.column_letter}98)"
cell.font = font
wb.save(out_file)
但是,当我打开 Excel 文件时,平均单元格是空的:
如您所见,第 100 行中的单元格除了“平均值”单元格外都是空的。其他单元格中没有任何公式,但单元格的标记确实有效(粗体文本)。
当打印上面代码中* 指示的公式时,我看到了这个:
=AVERAGE(B2:B98)
=AVERAGE(C2:C98)
=AVERAGE(D2:D98)
这就是我想要的样子。
当我执行cell.value = "test" 之类的操作而不是公式时,这确实 工作:
我认为这可能是语言问题,因为我的 Excel 是荷兰语,而我的语言是 AVERAGE=GEMIDDELDE,但即使我使用 GEMIDDELDE,这仍然会导致单元格为空。
关于为什么这不起作用的任何想法?我可能应该提到我正在执行此操作的 Excel 文件是在之前使用脚本创建的,但我确实正确保存了它,然后再次打开它以输入公式。
编辑: 我刚刚在docs 中找到了这个:
>>> from openpyxl import Workbook
>>> wb = Workbook()
>>> ws = wb.active
>>> # add a simple formula
>>> ws["A1"] = "=SUM(1, 1)"
>>> wb.save("formula.xlsx")
注意,函数必须使用英文名称,函数参数必须用逗号分隔,不能使用分号等其他标点符号。
如果我一步一步地按照这个步骤,那么这是可行的。但是这段代码使用Workbook(),而我使用load_workbook(),然后还是不行。
我尝试使用, 而不是;,但这也没有用。我认为您不应该使用; 很奇怪,因为单元格的值不只是一个字符串吗?我觉得openpyxl 没有做任何事情,但你不应该使用;。
我还下载了英文版的 Excel 以排除语言。我还使用, 和. 作为必须平均的单元格中的小数分隔符进行了测试,但这些都不起作用。我觉得现在这更像是一个openpyxl 问题;我正在使用版本3.0.5。如果您使用Workbook(),公式可以工作,但load_workbook() 就不起作用。不过,任何提示仍将不胜感激。
【问题讨论】: