首页 > 编程语言 >在 Excel 中使用 Python 自动填充公式

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

时间:2024-06-06 15:22:45浏览次数:18  
标签:起始 填充 Python 公式 Excel column start formula row

安转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)

 

标签:起始,填充,Python,公式,Excel,column,start,formula,row
From: https://www.cnblogs.com/lcl-cn/p/18235202

相关文章

  • Python学习笔记四(面向对象)
    传送门python及pycharm安装配置-CSDN博客 Python学习笔记(一)-CSDN博客 Python学习笔记(二)-CSDN博客 Python学习笔记三(面向对象)-CSDN博客 目录一、继承1.1什么是继承题外话:多继承的问题1.2重写1.3super()函数1.3.1调用父类的方法1.3.2多重继承中的调用(硬核)1.3.3......
  • Astar路径规划算法复现-python实现
    #-*-coding:utf-8-*-"""CreatedonFriMay2409:04:232024"""importosimportsysimportmathimportheapqimportmatplotlib.pyplotaspltimporttime'''传统A*算法'''classAstar:......
  • 如何在Ant-Design-Vue中实现动态表头并填充数据
    在现代前端开发中,基于Vue.js的AntDesignVue已经成为许多开发者构建高质量用户界面的首选工具之一。它提供了一整套丰富的UI组件,其中的Table组件广泛应用于数据展示和操作。本文将深入探讨如何在AntDesignVue中实现动态表头并填充数据,以满足复杂多变的业务需求。一、引言......
  • Python怎么发邮件不会被拦?如何设置信息?
    Python发邮件的注意事项?Python发邮件需要哪些库?使用Python发送电子邮件是一个常见的需求。然而,有时候邮件可能会被拦截,要确保发送的邮件不被拦截,需要一些技巧和注意事项。AokSend将介绍如何使用Python发送邮件,并且避免被拦截的方法。Python发邮件:配置服务要使用Python发送......
  • Amesim竟然可以玩游戏?如何在Amesim草图界面运行Python脚本
    开门见山,笔者在Amesim中运行了贪吃蛇游戏。不光有贪吃蛇,还有锻炼记忆力的益智游戏。难道Amesim真的有隐藏的内置游戏?答案没有的,上述游戏都是通过python编写的,而为了实现从Amesim的草图界面执行Python文件,需要使用Simulation库的scriptinteractive(SCRCALL01)模块:在模块......
  • Python - Django - MySQL #need to add distinct() after select_related().distinct(
    所以这是ads/views.py还有ads/models.py、ads/forms、ads/urls.py和其他文件,但评分器抱怨的是这个views.py...检索到3806个HTML字符测试已完成:在页面顶部发现菜单栏搜索"HHGTTG_421717639962"时发现多个广告。您可能需要在views.py中的select_related().di......
  • python基本语法元素
    1.输入与输出实现人机交互。输出:使用print()函数print("Hello,World!")#简单文本输出,输入:使用input()函数,用户输入默认被视为字符串name=input("请输入你的名字:")print("你好,"+name)2.注释单行注释:使用#符号#这是一个单行注释多行注释:使用三个单引号......
  • Python实现【监控远程仓库代码提交,如果有提交就自动执行需要监控测试的接口,以确保新提
    一、代码如下importgitfromdel_folderimportdel_folderimporttimefromsend_Dmessageimportsend_messagefromsend_giftimportsend_gift#设置远程仓库路径remote_url='xxx'#本地仓库路径local_path='xxx'#webhook地址和密钥webhook_url="x......
  • Python部分错误总结
    1.couldnotconvertstringtofloat:''由于空字符串不包含任何数字,因此无法确定其浮点数等价物,所以转换失败并抛出ValueError。在没办法处理数据的时候,可以通过设置默认值。some_value=""try:result=float(some_value)exceptValueError:result=0#或......
  • python---正则表达式
    ==本章目标:1:能够知道在Python中使用正则要导入的模块;[了解]   re模块2:能够使用re模块匹配单个字符;[重点]   \d \w 正则表达式的概述:基本介绍正则表达式,也叫做规则表达式,通常会说成[正则]实际上正则表达式就是指符合一定规则的字符串,同时他能用......