Python实现Excel自动化
个人网站
文章首发于公众号:小肖学数据分析
Excel是办公自动化的关键工具之一,用于数据存储、处理和分析。
Python通过 openpyxl 库,提供了强大的Excel操作能力,让我们可以读取、写入、修改和创建复杂的Excel文件。
安装 openpyxl
在开始之前,确保你已经安装了 openpyxl 库。如果还没有安装,可以使用以下命令:
pip install openpyxl
读取Excel文件
假设我们有一个名为 example.xlsx 的Excel文件,我们可以使用openpyxl来读取它。
from openpyxl import load_workbook# 加载工作簿
workbook = load_workbook('example.xlsx')# 选择活动的工作表
sheet = workbook.active# 读取特定单元格的数据
cell_value = sheet['A1'].value
print(f'The value in A1 is: {cell_value}')
写入Excel文件
如果想要修改Excel文件,你可以更改单元格的值并保存工作簿。
# 修改单元格内容
sheet['A1'] = 'New Value'# 添加一行数据
sheet.append([1, 'data', 3.14])# 保存工作簿
workbook.save('example_modified.xlsx')
创建图表
openpyxl 也允许你在Excel中创建图表来可视化数据。
from openpyxl.chart import BarChart, Reference# 选择图表的数据范围
chart_data = Reference(sheet, min_col=2, min_row=1, max_col=2, max_row=sheet.max_row)# 创建条形图
chart = BarChart()# 添加数据和类别(例如,日期或名称)
chart.add_data(chart_data, titles_from_data=True)# 将图表放入工作表中的特定位置
sheet.add_chart(chart, "E2")# 保存工作簿
workbook.save('example_chart.xlsx')
数据校验
openpyxl 支持数据校验,让用户在输入数据时进行限制。
from openpyxl.worksheet.datavalidation import DataValidation
from openpyxl import load_workbook
# 加载工作簿
workbook = load_workbook('example.xlsx')# 选择活动的工作表
sheet = workbook.active
# 创建一个数据验证对象
dv = DataValidation(type="list", formula1='"Item1,Item2,Item3"', showDropDown=True)# 添加数据验证到单元格
sheet.add_data_validation(dv)
dv.add(sheet["A2"])# 保存工作簿
workbook.save('example_validation.xlsx')
为了处理更复杂的Excel自动化任务,如合并多个sheet页,合并多个文件,以及拆分sheet页,你可以使用 openpyxl 进行编程。以下是每个任务对应的代码示例。
合并同一Excel文件中的多个sheet页
# 导入openpyxl库中的load_workbook模块,用于加载已存在的Excel文件
from openpyxl import load_workbook
#os模块获取文件的路径、文件名等相关操作
import os# 加载含有多个Sheet页的Excel文件
workbook = load_workbook('需合并的文件.xlsx')# 创建一个新的Sheet,用于存放合并后的数据
merged_sheet_title = "合并后"
workbook.create_sheet(merged_sheet_title)# 获取新创建的Sheet对象
merged_sheet = workbook[merged_sheet_title]# 初始化行计数器
row_counter = 1# 获取当前工作目录
current_dir = os.getcwd()# 遍历所有的Sheet
for sheet in workbook.sheetnames:# 跳过我们新建的合并Sheetif sheet == merged_sheet_title:continue# 获取当前Sheet对象current_sheet = workbook[sheet]# 如果是第一个Sheet,包括标题行,否则跳过标题行if row_counter == 1:for row in current_sheet.iter_rows(values_only=True):merged_sheet.append(row)row_counter += 1else:for row in current_sheet.iter_rows(min_row=2, values_only=True):merged_sheet.append(row)# 检查文件是否存在
file_path = '合并后的文件.xlsx'
abs_file_path = os.path.abspath(file_path)
if os.path.exists(file_path):response = input(f"{file_path} 已存在。是否覆盖?(y/n): ")if response.lower() != 'y':print("操作已取消。")else:# 保存工作簿,如果文件已存在则会被覆盖workbook.save(file_path)full_path = os.path.abspath(file_path)print(f"文件已覆盖到 {abs_file_path}")
else:# 文件不存在,直接保存workbook.save(file_path)full_path = os.path.abspath(file_path)print(f"文件已保存到 {abs_file_path}")
合并多个Excel文件中的对应sheet
假设你有多个Excel文件,每个文件都有一个名为Data的sheet,以下是如何合并它们的代码示例。
from openpyxl import load_workbook, Workbook# 创建一个新的Workbook对象来存放合并后的数据
merged_workbook = Workbook()
merged_sheet = merged_workbook.active
merged_sheet.title = 'Merged Data'# 假设您有一系列文件名,这些Excel文件都包含一个名为'Data'的sheet
file_names = ['file1.xlsx', 'file2.xlsx', 'file3.xlsx']# 遍历所有文件
for file_index, file_name in enumerate(file_names):workbook = load_workbook(file_name)sheet = workbook['Data']# 如果是第一个文件,保留标题行if file_index == 0:for row in sheet.iter_rows(values_only=True):merged_sheet.append(row)else:# 如果不是第一个文件,跳过标题行for row in sheet.iter_rows(min_row=2, values_only=True):merged_sheet.append(row)# 保存新的合并后的工作簿
merged_workbook.save('merged_files.xlsx')
拆分一个sheet页到多个sheet页
假设你有一个名为Data的sheet,你希望根据某个条件(例如,每10行数据创建一个新的sheet)进行拆分。
from openpyxl import load_workbook# 载入原始的工作簿
workbook = load_workbook('example.xlsx')
# 获取需要拆分的工作表
original_sheet = workbook['Data']# 设置每个新工作表的最大行数
rows_per_sheet = 10# 提取标题行数据
titles = [cell.value for cell in original_sheet[1]]# 初始化新工作表变量
new_sheet = None# 从第二行开始迭代原始工作表的数据行,以跳过标题行
for idx, row in enumerate(original_sheet.iter_rows(min_row=2, values_only=True), start=1):# 每rows_per_sheet行数据创建一个新工作表,并添加标题行if idx % rows_per_sheet == 1:sheet_title = f'Sheet_{(idx - 1) // rows_per_sheet + 1}'new_sheet = workbook.create_sheet(title=sheet_title)new_sheet.append(titles)# 往新工作表添加当前行数据new_sheet.append(row)# 保存工作簿
workbook.save('example_splitted.xlsx')
请注意,这些示例中的代码需要适当修改以适应你的特定需求,如文件名、sheet名、拆分条件等。同时,确保在运行这些脚本之前,备份所有原始文件,以免不小心覆盖或丢失数据。
相关文章:
Python实现Excel自动化
个人网站 文章首发于公众号:小肖学数据分析 Excel是办公自动化的关键工具之一,用于数据存储、处理和分析。 Python通过 openpyxl 库,提供了强大的Excel操作能力,让我们可以读取、写入、修改和创建复杂的Excel文件。 安装 open…...
WT2605-24SS高品质录音语音芯片:实现五种变音效果,为音频应用增添无限创意
在音频技术的世界里,录音芯片作为声音处理和传输的核心部件,一直以来都承载着人们对高品质音频的追求。而唯创知音推出的WT2605-24SS高品质录音语音芯片则在此基础上更进一步,带来了五种独特的变音效果,为音频应用注入了无限的创意…...
最美早安心语问候朋友们,祝你心情美好,万事如意
1、真诚的友谊,不会忘记,永远的朋友,每天想起。生活就是大海,朋友就是浪花,大海因有了浪花而美丽,生活有了朋友而甜蜜;祝福依旧,问候依然,祝朋友们开心快乐每一天……大家…...
2312skia,16画布
创建SkCanvas 首先,阅读SkCanvasAPI概述. Skia有多个接收SkCanvas绘图命令的后端.每个后端都有创建SkCanvas的独特方式.本页给出了每个示例: 光栅化 光栅化后端将绘画到可由Skia或客户管理的内存块. 推荐用管理画布命令要绘画内存对象的SkSurface为Raster和Ganesh后端创建画…...
mysql文本类型的最大长度限制
mysql支持很多类型,不同的文本有不同的长度限制。可以根据实际需要进行选择。 TINYBLOB, TINYTEXT L 1 bytes, where L < 2^8 (255 Bytes) BLOB, TEXT L 2 bytes, where L < 2^16 (64 Kilobytes) MEDIUMBLOB, MEDIUMTEXT L 3 b…...
ASP.NET《数据库原理及应用技术》课程指导平台的开发
1.1 系统设计目标 研制《数据库原理及应用技术》课程指导平台在功能上可以满足网络课堂教学活动的需要,在Internet上实现教学活动的各个环节。系统的基本设计原则有:先进性与方便性原则、功能实用性原则、开放性与可扩展性原则等。系统设计时采用较好的…...
OSHI-操作系统和硬件信息库
文章目录 引言一、快速入门1.1 OSHI的简介1.2 引入依赖1.3 涉及的包(package)1.4 涉及的核心类 二、操作系统信息:OperatingSystem2.1 总揽2.2 文件系统信息:FileSystem2.3 网络参数信息:NetworkParams2.4 进程信息&am…...
基于Java SSM框架+Vue实现企业公寓后勤管理系统项目【项目源码+论文说明】计算机毕业设计
基于java的SSM框架Vue实现企业宿舍后勤管理网站演示 摘要 21世纪的今天,随着社会的不断发展与进步,人们对于信息科学化的认识,已由低层次向高层次发展,由原来的感性认识向理性认识提高,管理工作的重要性已逐渐被人们所…...
stm32mp157和imx6ull在设备树节点上设置ap3216c的主要区别
stm32mp157和imx6ull在设备树节点上设置ap3216c的主要区别是,它们使用的不同的硬件架构和不同的设备树格式。以下是两者之间的差异: 硬件架构:stm32mp157是基于ARM Cortex-M4内核的微控制器,而imx6ull则是基于ARM Cortex-A7内核的…...
网工学习6-配置和管理 VLAN
6.1VLAN概念 1> 什么是 VLAN? VLAN 是一种在交换机上划分逻辑网段的二层技术。 2> 为什么要通过交换机划分网段? ① 因为交换机的端口密度比路由器高,并且价格比路由器低,所以组网成本更低。 ② 因为交换机划分网段比…...
MySQL库与表的备份
库的备份 备份 语法 mysqldump -P3306 -u root -p 密码 -B 数据库名 > 数据库备份存储的文件路径 例 mysqldump -P3306 -u root -p123456 -B mytest > D:/mytest.sql 注意 这是在linux命令行下。 还原 语法 scource 数据库文件路径 例 source D:/mysql-5.7.22/mytest.s…...
Python核心编程之基础内功
目录 一、语句和语法 1、 注释( # ) 2、继续( \ ) 3、多个语句构成代码组(:):...
GPT4-Turbo技术原理研发现状及未来应用潜力分析报告
今天分享的是GPT4-Turb系列深度研究报告:《GPT4-Turbo技术原理研发现状及未来应用潜力分析报告》。 (报告出品方:深度行业分析研究) 报告共计:46页 图像理解能力提升:三大视觉学习方法 为打造视觉大模…...
为什么 SQL 不适合图数据库
背景 “为什么你们的图形产品不支持 SQL 或类似 SQL 的查询语言?” 过去,我们的一些客户经常问这个问题,但随着时间的推移,这个问题变得越来越少。 尽管一度被忽视,但图数据库拥有无缝设计并适应其底层数据结构的查询…...
【Rust日报】2023-12-02 深度学习框架 Burn 发布 v0.11.0
深度学习框架 Burn 发布 v0.11.0 深度学习框架 Burn 发布 v0.11.0,新版本引入了自动内核融合(Kernel Fusion)功能,大大提升了访存密集型(memory-bound)操作的性能。同时宣布成立 Tracel AI (https://tracel…...
MySQL性能调优-1-实际优化案例
关于SQL优化的思路,一般都是使用执行计划看看是否用到了索引,主要可能有两大类情况: 对业务字段建立了二级联合索引,但是MySQL错误地觉得走主键聚族索引全表扫描效率更高,而没有走二级索引 走二级索引,但…...
JavaScript空值合并运算符
The Nullish Coalescing Operator(空值合并运算符)是一种 JavaScript 的新运算符,用于解决默认值设定中存在的一些问题。它的语法为 ??(两个问号),表示当左侧的操作数为 null 或 undefined 时,…...
Spring Boot 集成 spring security 01
一、导入依赖(pom.xml) <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation&qu…...
C 编程中使用字符串
理解字符串: C 中的字符串是使用字符数组来操作的。数组中的每个字符对应字符串的一个元素,字符串的结尾由空字符(\0)标记。这个空字符至关重要,因为它表示字符串的结尾,并允许函数确定字符串在内存中的结…...
【GD32307E-START】04 使用TinyMaix进行手写数字识别
【GD32307E-START】04 使用TinyMaix进行手写数字识别 参考博客 【GD32F427开发板试用】使用TinyMaix进行手写数字识别 https://blog.csdn.net/weixin_47569031/article/details/129009839 软硬件平台 GD32F307E-START Board开发板GCC Makefile TinyMaix简介 TinyMaix是国…...
C++初阶-list的底层
目录 1.std::list实现的所有代码 2.list的简单介绍 2.1实现list的类 2.2_list_iterator的实现 2.2.1_list_iterator实现的原因和好处 2.2.2_list_iterator实现 2.3_list_node的实现 2.3.1. 避免递归的模板依赖 2.3.2. 内存布局一致性 2.3.3. 类型安全的替代方案 2.3.…...
springboot 百货中心供应链管理系统小程序
一、前言 随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,百货中心供应链管理系统被用户普遍使用,为方…...
golang循环变量捕获问题
在 Go 语言中,当在循环中启动协程(goroutine)时,如果在协程闭包中直接引用循环变量,可能会遇到一个常见的陷阱 - 循环变量捕获问题。让我详细解释一下: 问题背景 看这个代码片段: fo…...
【人工智能】神经网络的优化器optimizer(二):Adagrad自适应学习率优化器
一.自适应梯度算法Adagrad概述 Adagrad(Adaptive Gradient Algorithm)是一种自适应学习率的优化算法,由Duchi等人在2011年提出。其核心思想是针对不同参数自动调整学习率,适合处理稀疏数据和不同参数梯度差异较大的场景。Adagrad通…...
React第五十七节 Router中RouterProvider使用详解及注意事项
前言 在 React Router v6.4 中,RouterProvider 是一个核心组件,用于提供基于数据路由(data routers)的新型路由方案。 它替代了传统的 <BrowserRouter>,支持更强大的数据加载和操作功能(如 loader 和…...
3.3.1_1 检错编码(奇偶校验码)
从这节课开始,我们会探讨数据链路层的差错控制功能,差错控制功能的主要目标是要发现并且解决一个帧内部的位错误,我们需要使用特殊的编码技术去发现帧内部的位错误,当我们发现位错误之后,通常来说有两种解决方案。第一…...
系统设计 --- MongoDB亿级数据查询优化策略
系统设计 --- MongoDB亿级数据查询分表策略 背景Solution --- 分表 背景 使用audit log实现Audi Trail功能 Audit Trail范围: 六个月数据量: 每秒5-7条audi log,共计7千万 – 1亿条数据需要实现全文检索按照时间倒序因为license问题,不能使用ELK只能使用…...
屋顶变身“发电站” ,中天合创屋面分布式光伏发电项目顺利并网!
5月28日,中天合创屋面分布式光伏发电项目顺利并网发电,该项目位于内蒙古自治区鄂尔多斯市乌审旗,项目利用中天合创聚乙烯、聚丙烯仓库屋面作为场地建设光伏电站,总装机容量为9.96MWp。 项目投运后,每年可节约标煤3670…...
GitHub 趋势日报 (2025年06月08日)
📊 由 TrendForge 系统生成 | 🌐 https://trendforge.devlive.org/ 🌐 本日报中的项目描述已自动翻译为中文 📈 今日获星趋势图 今日获星趋势图 884 cognee 566 dify 414 HumanSystemOptimization 414 omni-tools 321 note-gen …...
【分享】推荐一些办公小工具
1、PDF 在线转换 https://smallpdf.com/cn/pdf-tools 推荐理由:大部分的转换软件需要收费,要么功能不齐全,而开会员又用不了几次浪费钱,借用别人的又不安全。 这个网站它不需要登录或下载安装。而且提供的免费功能就能满足日常…...
