在 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_workbook 和 Translator 类。
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)
在 Excel 中使用 Python 自动填充公式的更多相关文章
- EXCEL 如何实现下拉填充公式,保持公式部分内容不变,使用绝对引用
EXCEL 如何实现下拉填充公式,保持公式部分内容不变,使用绝对引用 在不想变的单元格前加$符号(列标和列数,两个都要加$),变成绝对引用,默认情况是相对引用 L4固定不变的方式:$L$4 M4固定不 ...
- vim中设置Python自动补全
转自:http://blog.csdn.net/wangzhuo_0717/article/details/6942428 在VIM里面增加python的autocomplete功能的做法如下: 1. ...
- [转载]启用 VIM 中的 Python 自动补全及提示功能
转载: http://zhongwei-leg.iteye.com/blog/941474 周围的同事不喜欢使用 VIM 写 Python 代码的原因之一就是,VIM 不能像 Visual Studi ...
- Excel中不常用的一些公式用法
INDIRECT函数 http://baike.baidu.com/view/3222185.htm 用于使用单元格内容拼凑公式的情况. 1.采用 [工作表名]!单元格名 的形式读取内容: 2.所 ...
- excel中如何取消自动超链接?
最近做的表格有点多,年终述职也到了.总有一些地方生疏了,幸好还有点小印象.记录下来,以后可以回来看看. 方法一 适合单个链接的取消 1 输入网址后,按回车键确认,快捷键ctrl+z,即可取消,这种不好 ...
- 关于ThinkPHP中的时间自动填充
<?php class NewsModel extends Model{ protected $_auto = array( array('time_at','mydate','1','call ...
- excel匹配相应条件 自动填充数据
=VLOOKUP(A6&B6,IF({1,0},Sheet3!$A$3:$A$505&Sheet3!$B$3:$C$505,Sheet3!$Q$3:$Q$505),2,0) =VLOO ...
- ThinkPHP中的时间自动填充 无法获取时间
protected $_auto = array( array('addTime','time','1','function'), ); addTime在数据库里的的类型必须为int ...
- EXCEL中汉字转大写拼音
最近一直没有什么成系统的学习东西,也就没写什么随笔.昨天晚上,一哥们儿说给弄个输入汉字直接转拼音的程序,问了他几点需求,说你想做个啥的,最后,他说想做个EXCEL的,现在发现EXCEL确实是个好东西啊 ...
- word表格如何实现序号自动填充
打开word文档,我们需要在如下表格中的准考证号这一列中输入准考证号,手工输入肯定很慢,且容易出错. 我们先选中需要填充准考证号的表格. 选择功能区域中的“开始”,在“段落”组中点击“编号”按 ...
随机推荐
- esp8266,arduino,网页显示dht11温湿度,控制继电器开关,局域网智能家居
不说了,上代码,用arduino实现esp8266代码 #include <ESP8266WiFi.h> #include <WiFiClient.h> #include &l ...
- 红日安全vulnstack (一)
网络拓扑图 靶机参考文章 CS/MSF派发shell 环境搭建 IP搭建教程 本机双网卡 65网段和83网段是自己本机电脑(虚拟机)中的网卡, 靶机外网的IP需要借助我们这两个网段之一出网 Kali ...
- 当大火的文图生成模型遇见知识图谱,AI画像趋近于真实世界
简介: 模型免费开放!零基础也能一键进行AI艺术创作.本⽂简要介绍ARTIST的技术解读,以及如何在EasyNLP框架中使⽤ARTIST模型. 导读 用户生成内容(User Generated Con ...
- 注册配置、微服务治理、云原生网关三箭齐发,阿里云 MSE 持续升级
简介: MSE 云原生网关作为托管型的独享实例,与部署业务应用的资源解耦,并支持过载保护.故障自愈.限流降级等功能,确保流量高峰时的稳定性.其优异的性能表现使费芮不需要高规格的资源配置即可支撑大规模的 ...
- MaxCompute Tunnel 技术原理及开发实战
简介: MaxCompute(原名ODPS)是一种快速.完全托管的EB级数据仓库解决方案, 致力于批量结构化数据的存储和计算,为用户提供数据仓库的解决方案及分析建模服务.Tunnel是MaxCompu ...
- [PHP] 自定义 laravel/passport 的误区讲解
Passport 的 Client 模型对应用户是默认的 User 模型.使用的 guards 是 api. 如果你发现自定义 passport 时总是调试不成功,那么很有可能是以下原因. /** * ...
- vue-cli快速搭建项目的几个文件(二)
=======ggcss样式======== :root{ --bgColor : #d3252a; --pinkColor : #ff4e81; --textColor : ...
- Golang从入门到微服务
学习视频: https://www.bilibili.com/video/BV1Sg411T7TV?p=69 学习资料下载: 链接: https://pan.baidu.com/s/1Yk4GemFR ...
- 一篇文章让你掌握99%的Python运算符。干货很多,建议收藏!!!
Python 中的运算符是编程中的基础概念,用于执行各种操作和数据计算.以下是一些 Python 中的主要运算符的概述: 运算符 1. 算术运算符 算术运算符语法规则 +:加法 -:减法 *:乘法 / ...
- 【原创】不同RTOS POSIX接口的实现差异
目录 前言 POSIX简介 RTOS对POSIX的实现情况 Zephyr FreeRTOS RTOS提供的POSIX接口实时吗? nanosleep Timer-不同linux版本和xenomai的实 ...