用openpyxl向下计算公式

Posted

技术标签:

【中文标题】用openpyxl向下计算公式【英文标题】:Calculate formula downwards with openpyxl 【发布时间】:2020-05-16 10:21:51 【问题描述】:

我有一个电子表格,其中 A 列包含日期。我正在使用公式来查看 A1 和 A2、A1 和 A3 等之间的天数差异,使用 B 列中的这个 excel 公式。

=datedif(A1,$A1$1,"D") 

在 Excel 中手动向下拖动时,它会变为

=datedif(A2,$A$1,"D")

但是,我的脚本将原始公式填充到整个 B 列,保留 A1 而不是向下移动到 A2、A3 等。这是我的脚本。

for row in ws8.iter_rows(min_col=2, max_col=2, min_row=1):
    for cell in row:
        cell.value = '=datedif(A1,$A$1,"D")'

【问题讨论】:

【参考方案1】:

如果您知道 max_row 值,请小心包含它。

ws8 = wb.active
for i,row in enumerate(ws8.iter_rows(min_col=2, max_col=2, max_row=10)):
    for cell in row:
        cell.value = f'=datedif(Ai+1,$A$1,"D")'

对于旧版本的 python,没有 f 字符串:

ws8 = wb.active
for i,row in enumerate(ws8.iter_rows(min_col=2, max_col=2, max_row=10)):
    for cell in row:
        cell.value = '=datedif(A,$A$1,"D")'.format(i+1)

输出

【讨论】:

我在公式的结尾处收到无效语法 它对我有用,你能仔细检查一下你是否复制了我提供的内容吗? enumerate() 可以使用时,切勿使用计数器。更好的是,使用cell.row @CharlieClark 好点,谢谢。我将进一步研究 cell.row。【参考方案2】:

您将其粘贴为字符串,然后将其转换为公式。 我不知道 python contatenation 是否有效,但您需要在其中传递行号:

howcell.value = '=datedif(A'+ row ',$A$1,"D")'

【讨论】:

以上是关于用openpyxl向下计算公式的主要内容,如果未能解决你的问题,请参考以下文章

如何使用openpyxl读取和修改Excel中的公式,实现自动化计算?

Excel 向下拖动单元格,实现公式自动计算

出生年月日提取年龄公式是啥?

Oracle PL/SQL 计算年龄

我们如何在电子表格公式中更改列值并保持行不变?

excel怎样用函数公式计算天数