【问题标题】:openpyxl formula blank in output excel输出excel中的openpyxl公式空白
【发布时间】: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() 就不起作用。不过,任何提示仍将不胜感激。

【问题讨论】:

    标签: python excel openpyxl


    【解决方案1】:

    好的...所以,我现在有一些可以使用的东西。使用load_workbook() 时,可以使用data_only 标志(来自here):

    在 load_workbook 中可以使用几个标志。

    • data_only 控制带有公式的单元格是否具有公式(默认)或 Excel 上次读取工作表时存储的值。

    我对同一个 Excel 文件执行的操作不仅仅是在问题中创建平均行,并且在执行这些操作时,我会像这样打开工作簿:

        wb = load_workbook(filename, data_only=True)
    

    事实证明,这会使公式不再起作用?!当我在打开工作簿的所有位置删除此标志时,AVERAGE 公式有效。确保如果您选择了一系列列,那么仍然使用:,但如果您使用具有多个参数的公式,则用,not ; 分隔它们。

    哦,顺便说一句,您可以在 Excel 中以不同的语言加载文件;只要你把公式用英文写在你的代码里,它就会翻译得恰到好处。

    【讨论】:

      猜你喜欢
      • 2019-11-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-19
      • 2015-09-18
      • 2020-12-29
      • 2015-04-25
      • 1970-01-01
      相关资源
      最近更新 更多