用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向下计算公式的主要内容,如果未能解决你的问题,请参考以下文章