【问题标题】:Calculate formula downwards with openpyxl用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")'

【问题讨论】:

    标签: python excel formula openpyxl


    【解决方案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(A{i+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")'
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-04-15
      • 1970-01-01
      • 2018-09-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-26
      相关资源
      最近更新 更多