如何使用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
相关产品推荐
相关产品推荐

