You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Python openpyxl为Excel指定列插入逐行计算公式

Python+openpyxl实现Excel公式自动更新方案

核心逻辑

openpyxl支持直接将Excel公式字符串赋值给单元格,每次写完新的原始数据后,遍历所有数据行批量更新三列的公式即可。

完整实现代码

from openpyxl import load_workbook

path = r"C:/folder/file.xlsx"
# 加载工作簿
wb = load_workbook(path)
# 替换为实际工作表名
sheet = wb["Sheet1"]

# 写入新行的A、C、E列原始数据(已修正原参考代码的列号错误)
new_row = sheet.max_row + 1
sheet.cell(row=new_row, column=1, value=10)  # A列
sheet.cell(row=new_row, column=3, value=20)  # C列
sheet.cell(row=new_row, column=5, value=100) # E列

# 批量更新B、D、F列公式
# 若首行是数据而非表头,可将range起始改为1,并单独给首行B1、D1赋值为0
for row_num in range(2, sheet.max_row + 1):
    # B列:当前行A值 - 上一行A值
    sheet[f"B{row_num}"] = f"=A{row_num}-A{row_num-1}"
    # D列:当前行C值 - 上一行C值
    sheet[f"D{row_num}"] = f"=C{row_num}-C{row_num-1}"
    # F列:B列值/D列值,IFERROR处理除零报错
    sheet[f"F{row_num}"] = f"=IFERROR(B{row_num}/D{row_num}, \"\")"

# 保存修改
wb.save(path)

注意事项

  • 原参考代码存在列号对应错误:openpyxl中列号从1开始计数,1对应A列、3对应C列、5对应E列,已在示例中修正。
  • 若Excel第一行是表头,上述循环从第2行开始的逻辑无需调整;若第一行就是首行数据,可在循环前补充首行赋值代码:
sheet["B1"] = 0
sheet["D1"] = 0
sheet["F1"] = '=IFERROR(B1/D1, "")'
  • 公式中IFERROR为Excel原生函数,可避免D列值为0时出现#DIV/0!报错,第二个参数可根据需求修改为0或其他默认值。
  • 每次写入新行后都会全量更新所有行的公式,不会出现旧数据行公式不同步的问题。

内容的提问来源于stack exchange,提问作者Bobby

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 11:24:06