输出中的 openpyxl 公式空白 excel
openpyxl formula blank in output excel
我想使用 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 行中的单元格除了“均值”单元格外都是空的。其他单元格中没有任何公式,但单元格的标记 did 有效(粗体文本)。
在打印上面代码中用*
表示的公式时,我看到了这个:
=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")
NB you must use the English name for a function and function arguments must be separated by commas and not other punctuation such as semi-colons.
如果我按照这个步骤一步一步来,那么这个就可以了。但是这段代码用的是Workbook()
,但是我用的是load_workbook()
,然后还是不行
我尝试使用 ,
而不是 ;
,但这也没有用。我认为您不应该使用 ;
很奇怪,因为单元格的值不只是一个字符串吗?我觉得 openpyxl
对它没有任何作用,但你不应该使用 ;
.
我还下载了英文版的Excel排除语言。我还使用 ,
和 .
作为必须求平均值的单元格中的小数点分隔符进行了测试,但是 none 也可以。我觉得现在这更像是一个 openpyxl
问题;我正在使用 3.0.5
版本。如果您使用 Workbook()
,公式有效,但 load_workbook()
无效。不过,任何提示仍将不胜感激。
好的...所以,我现在有一些东西可以用了。使用 load_workbook()
时,可以使用 data_only
标志(来自 here):
There are several flags that can be used in load_workbook.
- data_only controls whether cells with formulae have either the formula (default) or the value stored the last time Excel read the sheet.
我对同一个 Excel 文件执行了更多操作,而不仅仅是在问题中创建平均行,并且在执行这些操作时,我像这样打开工作簿:
wb = load_workbook(filename, data_only=True)
事实证明,这会使公式不再有效!当我在打开工作簿的所有地方删除此标志时,AVERAGE 公式有效。确保如果您 select 一系列列,则仍使用 :
,但如果您使用具有多个参数的公式,则使用 ,
和 分隔它们不是 ;
.
哦,顺便说一句,您可以用不同的语言加载 Excel 中的文件;只要您在代码中输入英文公式,它就会进行适当的翻译。
我想使用 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 行中的单元格除了“均值”单元格外都是空的。其他单元格中没有任何公式,但单元格的标记 did 有效(粗体文本)。
在打印上面代码中用*
表示的公式时,我看到了这个:
=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")
NB you must use the English name for a function and function arguments must be separated by commas and not other punctuation such as semi-colons.
如果我按照这个步骤一步一步来,那么这个就可以了。但是这段代码用的是Workbook()
,但是我用的是load_workbook()
,然后还是不行
我尝试使用 ,
而不是 ;
,但这也没有用。我认为您不应该使用 ;
很奇怪,因为单元格的值不只是一个字符串吗?我觉得 openpyxl
对它没有任何作用,但你不应该使用 ;
.
我还下载了英文版的Excel排除语言。我还使用 ,
和 .
作为必须求平均值的单元格中的小数点分隔符进行了测试,但是 none 也可以。我觉得现在这更像是一个 openpyxl
问题;我正在使用 3.0.5
版本。如果您使用 Workbook()
,公式有效,但 load_workbook()
无效。不过,任何提示仍将不胜感激。
好的...所以,我现在有一些东西可以用了。使用 load_workbook()
时,可以使用 data_only
标志(来自 here):
There are several flags that can be used in load_workbook.
- data_only controls whether cells with formulae have either the formula (default) or the value stored the last time Excel read the sheet.
我对同一个 Excel 文件执行了更多操作,而不仅仅是在问题中创建平均行,并且在执行这些操作时,我像这样打开工作簿:
wb = load_workbook(filename, data_only=True)
事实证明,这会使公式不再有效!当我在打开工作簿的所有地方删除此标志时,AVERAGE 公式有效。确保如果您 select 一系列列,则仍使用 :
,但如果您使用具有多个参数的公式,则使用 ,
和 分隔它们不是 ;
.
哦,顺便说一句,您可以用不同的语言加载 Excel 中的文件;只要您在代码中输入英文公式,它就会进行适当的翻译。