在 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文档,我们需要在如下表格中的准考证号这一列中输入准考证号,手工输入肯定很慢,且容易出错. 我们先选中需要填充准考证号的表格. 选择功能区域中的“开始”,在“段落”组中点击“编号”按 ...
随机推荐
- 如何实现数据库数据到Abp vnext实体对象的同步?以及代码生成工具
在采用了EF Core的Code First方式下,如果你在数据库中直接添加了新表或存储过程,你需要在项目代码中手动反向工程这些数据库的更改,以保持Code First的代码与数据库同步.这种情况可以 ...
- 宜搭小技巧|维护Excel太麻烦?Excel一键转应用,为你的工作减负!
简介:只需6步,轻松学会「Excel一键创建应用」! 在钉钉的聊天窗口中,每天都会流转数量巨大的Excel表格,用于信息收集和数据统计,但有时这些表格并不能很好地帮助到我们的工作,相反还会带来许多不 ...
- 殷浩详解DDD:如何避免写流水账代码?
简介: 在日常工作中我观察到,面对老系统重构和迁移场景,有大量代码属于流水账代码,通常能看到开发在对外的API接口里直接写业务逻辑代码,或者在一个服务里大量的堆接口,导致业务逻辑实际无法收敛,接口复用 ...
- 日志审计携手DDoS防护助力云上安全
简介: 本文主要介绍日志审计结合DDoS防护保障云上业务安全的新实践. 日志审计携手DDoS防护助力云上安全 1 背景介绍 设想一下,此时你正在高速公路上开车去上班,路上还有其他汽车,总体而言,大家 ...
- [FAQ] Solidity 并发执行 ? 重入攻击 ?
Solidity 实现的合约中,函数操作都是原子操作,旷工本地执行,取得共识后发布到区块链上. 实际发布到区块链上的不存在并发,全节点同步状态到本地. Solidity 中有三种方式进行转账,addr ...
- WPF 使用 MAUI 的自绘制逻辑
这是一个当前还没开发完成的功能,准确来说连预览版也算不上的功能.我原本以为 MAUI 是无法在 WPF 上面跑的,然而在看完了 MAUI 整个大的设计,才了解到,原来 MAUI 是一个非常庞大的开发项 ...
- 2019-4-29-win10-uwp-使用-Border-布局
title author date CreateTime categories win10 uwp 使用 Border 布局 lindexi 2019-04-29 12:29:45 +0800 201 ...
- NoSQL 数据库管理工具,搭载强大支持:Redis、Memcached、SSDB、LevelDB、RocksDB,为您的数据存储提供无与伦比的灵活性与性能!
NoSQL 数据库管理工具,搭载强大支持:Redis.Memcached.SSDB.LevelDB.RocksDB,为您的数据存储提供无与伦比的灵活性与性能! [官网地址]:http://www.re ...
- CMDB开发(一)
一.CMDB前戏 # 项目开发流程 1.需求分析 产品经理 开发人员 客户等三方会议 2.架构设计 框架的选择 语言选择 数据库选择 3.分组开发 小组成员各自开发各自的功能(可能也会有交集) 4. ...
- vue下获得经纬度省市区
1.根目录html文件引入 <!--引入百度 API,"ak=" 后面一串码是密钥,最好自己申请--> <script type="text/javas ...