在 Excel 中使用 Python 自动填充公式

安转Python包的国内镜像源

复制代码
清华大学
https://pypi.tuna.tsinghua.edu.cn/simple
 
阿里云
https://mirrors.aliyun.com/pypi/simple/
 
豆瓣
https://pypi.douban.com/simple/ 
 
百度云
https://mirror.baidu.com/pypi/simple/
 
中科大
https://pypi.mirrors.ustc.edu.cn/simple/
 
华为云
https://mirrors.huaweicloud.com/repository/pypi/simple/
 
腾讯云
https://mirrors.cloud.tencent.com/pypi/simple/

准备工作

首先,确保你已经安装了 openpyxl 库。如果还没有安装,可以使用以下命令进行安装:

复制代码
pip install openpyxl

步骤 1:导入必要的库

首先,我们需要导入 openpyxl 库中的 load_workbookTranslator 类。

复制代码
from openpyxl import load_workbook
from openpyxl.formula.translate import Translator

步骤 2:定义填充公式的函数

接下来,我们定义一个名为 fill_down_formulas 的函数。这个函数接受以下参数:

  • filepath:Excel 文件的路径。
  • sheetname:工作表名称。
  • start_row:开始填充公式的行号。
  • start_column:开始填充公式的列号。
  • num_columns:需要填充公式的列数。
复制代码
def fill_down_formulas(filepath, sheetname, start_row, start_column, num_columns):
    try:
        # 加载 Excel 文件
        wb = load_workbook(filename=filepath)
        ws = wb[sheetname]

步骤 3:获取起始单元格的公式

在指定的列范围内,我们首先获取起始单元格的公式。

复制代码
        # 循环处理每一列
        for column_index in range(start_column, start_column + num_columns):
            # 获取起始单元格的公式
            formula = ws.cell(row=start_row, column=column_index).value
            print(f"原始公式 ({start_row}, {column_index}):", formula)

步骤 4:向下填充公式

从起始行的下一行开始,我们将公式填充到该列的其余单元格中。这里使用 Translator 类来更新公式。

复制代码
            # 从起始行开始填充公式
            for row in range(start_row + 1, ws.max_row + 1):
                # 获取起始单元格和当前单元格的坐标
                start_coordinate = ws.cell(row=start_row, column=column_index).coordinate
                current_coordinate = ws.cell(row=row, column=column_index).coordinate
                print("起始坐标:", start_coordinate)
                print("当前坐标:", current_coordinate)

                # 使用 Translator 解析并更新公式
                translated_formula = Translator(formula, origin=start_coordinate).translate_formula(current_coordinate)
                print("翻译后的公式:", translated_formula)
                ws.cell(row=row, column=column_index).value = translated_formula

步骤 5:保存修改后的 Excel 文件

填充完公式后,保存修改后的 Excel 文件。

复制代码
        # 保存修改后的 Excel 文件
        wb.save(filepath)
        print(f"成功向下填充公式到第 {start_column} 列到第 {start_column + num_columns - 1} 列,起始行 {start_row}")
    except Exception as e:
        print(f"填充公式时出错: {e}")

步骤 6:执行脚本

在脚本的最后,我们指定 Excel 文件路径、工作表名称、起始行、起始列和列数,并调用 fill_down_formulas 函数。

复制代码
if __name__ == "__main__":
    # 指定 Excel 文件路径、工作表名、起始行、起始列和列数
    excel_file_path = "C:\\Users\\Administrator\\Desktop\\销售系数数据同步.xlsx"
    sheet_name = "商品费用"
    start_row = 2  # 指定起始行
    start_column = 47  # 指定起始列
    num_columns = 7  # 指定要填充公式的列数

    # 调用函数将公式向下填充到指定列和起始行之后
    fill_down_formulas(excel_file_path, sheet_name, start_row, start_column, num_columns)

完整代码

复制代码
from openpyxl import load_workbook
from openpyxl.formula.translate import Translator

def fill_down_formulas(filepath, sheetname, start_row, start_column, num_columns):
    try:
        # 加载 Excel 文件
        wb = load_workbook(filename=filepath)
        ws = wb[sheetname]

        # 循环处理每一列
        for column_index in range(start_column, start_column + num_columns):
            # 获取起始单元格的公式
            formula = ws.cell(row=start_row, column=column_index).value
            print(f"原始公式 ({start_row}, {column_index}):", formula)

            # 从起始行开始填充公式
            for row in range(start_row + 1, ws.max_row + 1):
                # 获取起始单元格和当前单元格的坐标
                start_coordinate = ws.cell(row=start_row, column=column_index).coordinate
                current_coordinate = ws.cell(row=row, column=column_index).coordinate
                print("起始坐标:", start_coordinate)
                print("当前坐标:", current_coordinate)

                # 使用 Translator 解析并更新公式
                translated_formula = Translator(formula, origin=start_coordinate).translate_formula(current_coordinate)
                print("翻译后的公式:", translated_formula)
                ws.cell(row=row, column=column_index).value = translated_formula

        # 保存修改后的 Excel 文件
        wb.save(filepath)
        print(f"成功向下填充公式到第 {start_column} 列到第 {start_column + num_columns - 1} 列,起始行 {start_row}")
    except Exception as e:
        print(f"填充公式时出错: {e}")

if __name__ == "__main__":
    # 指定 Excel 文件路径、工作表名、起始行、起始列和列数
    excel_file_path = "C:\\Users\\Administrator\\Desktop\\销售系数数据同步.xlsx"
    sheet_name = "商品费用"
    start_row = 2  # 指定起始行
    start_column = 47  # 指定起始列
    num_columns = 7  # 指定要填充公式的列数

    # 调用函数将公式向下填充到指定列和起始行之后
    fill_down_formulas(excel_file_path, sheet_name, start_row, start_column, num_columns)
相关推荐
Kaydeon5 小时前
【AIGC】50倍加速!NVIDIA蒸馏算法rCM:分数正则化连续时间一致性模型的大规模扩散蒸馏
人工智能·pytorch·python·深度学习·计算机视觉·aigc
B站_计算机毕业设计之家6 小时前
大数据实战:Python+Flask 汽车数据分析可视化系统(爬虫+线性回归预测+推荐 源码+文档)✅
大数据·python·数据分析·flask·汽车·线性回归·预测
晚枫~6 小时前
零基础快速上手Playwright自动化测试
javascript·python·测试工具·c#·自动化
该用户已不存在7 小时前
Python项目的5种枚举骚操作
后端·python
mortimer7 小时前
从 Python+venv+pip 迁移到 uv 全过程 及 处理 torch + cuda 的跨平台指南
pytorch·python·macos
berryyan7 小时前
Windows WSL 环境下配置 Claude Code 非官方账号2233.ai完整教程
人工智能·python
用户8356290780517 小时前
告别冗余:用Python删除PDF中的超链接
后端·python
川石课堂软件测试9 小时前
全链路Controller压测负载均衡
android·运维·开发语言·python·mysql·adb·负载均衡
喜欢吃豆9 小时前
微调高级推理大模型(COT)的综合指南:从理论到实践
人工智能·python·语言模型·大模型·微调·强化学习·推理模型
喜欢吃豆10 小时前
从指令遵循到价值对齐:医疗大语言模型的进阶优化、对齐与工具集成综合技术白皮书
人工智能·python·语言模型·自然语言处理·大模型·强化学习·constitutional