如何用openpyxl批量写入带不同单元格引用的Excel公式?
实现方案
原有错误代码的核心问题:
- 不需要遍历列字母,你固定写入列为T列,仅需动态遍历行号即可
- 公式内的行号未跟随循环动态变化,且错误赋值给
sheet['sheet name'],没有定位到目标单元格
直接循环实现代码
# 遍历2到6行,range左闭右开所以结束值写7 for row_num in range(2, 7): # 动态拼接单元格位置和公式内的行号 sheet[f'T{row_num}'] = f'=IF(J{row_num} = "L", 1, 0)' # 写入完成后保存文件 wb.save('你的目标文件.xlsx')
封装为可复用函数
支持自定义文件、工作表、行列范围、判断条件,灵活适配不同场景:
import openpyxl from openpyxl import load_workbook def batch_write_formula(file_path: str, sheet_name: str, write_col: str, judge_col: str, start_row: int, end_row: int, judge_val: str): # 加载工作簿和工作表 wb = load_workbook(file_path) sheet = wb[sheet_name] # 批量写入公式 for row_num in range(start_row, end_row + 1): sheet[f'{write_col}{row_num}'] = f'=IF({judge_col}{row_num} = "{judge_val}", 1, 0)' # 保存修改 wb.save(file_path) # 调用示例 if __name__ == '__main__': batch_write_formula( file_path = '你的Excel文件路径', sheet_name = '你要操作的工作表名', write_col = 'T', judge_col = 'J', start_row = 2, end_row = 6, judge_val = 'L' )
补充说明
- 若不知道目标范围的最大行号,可以用
sheet.max_row直接获取工作表当前有效数据的最大行,无需手动指定end_row - 保存路径和原文件路径一致时会直接覆盖原文件内容,测试阶段建议先备份原文件,或另存为新文件
内容的提问来源于stack exchange,提问作者Kajin
相关产品推荐
相关产品推荐

