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是国…...
MPNet:旋转机械轻量化故障诊断模型详解python代码复现
目录 一、问题背景与挑战 二、MPNet核心架构 2.1 多分支特征融合模块(MBFM) 2.2 残差注意力金字塔模块(RAPM) 2.2.1 空间金字塔注意力(SPA) 2.2.2 金字塔残差块(PRBlock) 2.3 分类器设计 三、关键技术突破 3.1 多尺度特征融合 3.2 轻量化设计策略 3.3 抗噪声…...
【机器视觉】单目测距——运动结构恢复
ps:图是随便找的,为了凑个封面 前言 在前面对光流法进行进一步改进,希望将2D光流推广至3D场景流时,发现2D转3D过程中存在尺度歧义问题,需要补全摄像头拍摄图像中缺失的深度信息,否则解空间不收敛…...
【HTML-16】深入理解HTML中的块元素与行内元素
HTML元素根据其显示特性可以分为两大类:块元素(Block-level Elements)和行内元素(Inline Elements)。理解这两者的区别对于构建良好的网页布局至关重要。本文将全面解析这两种元素的特性、区别以及实际应用场景。 1. 块元素(Block-level Elements) 1.1 基本特性 …...
大模型多显卡多服务器并行计算方法与实践指南
一、分布式训练概述 大规模语言模型的训练通常需要分布式计算技术,以解决单机资源不足的问题。分布式训练主要分为两种模式: 数据并行:将数据分片到不同设备,每个设备拥有完整的模型副本 模型并行:将模型分割到不同设备,每个设备处理部分模型计算 现代大模型训练通常结合…...
搭建DNS域名解析服务器(正向解析资源文件)
正向解析资源文件 1)准备工作 服务端及客户端都关闭安全软件 [rootlocalhost ~]# systemctl stop firewalld [rootlocalhost ~]# setenforce 0 2)服务端安装软件:bind 1.配置yum源 [rootlocalhost ~]# cat /etc/yum.repos.d/base.repo [Base…...
多模态图像修复系统:基于深度学习的图片修复实现
多模态图像修复系统:基于深度学习的图片修复实现 1. 系统概述 本系统使用多模态大模型(Stable Diffusion Inpainting)实现图像修复功能,结合文本描述和图片输入,对指定区域进行内容修复。系统包含完整的数据处理、模型训练、推理部署流程。 import torch import numpy …...
C++ 设计模式 《小明的奶茶加料风波》
👨🎓 模式名称:装饰器模式(Decorator Pattern) 👦 小明最近上线了校园奶茶配送功能,业务火爆,大家都在加料: 有的同学要加波霸 🟤,有的要加椰果…...
C# 表达式和运算符(求值顺序)
求值顺序 表达式可以由许多嵌套的子表达式构成。子表达式的求值顺序可以使表达式的最终值发生 变化。 例如,已知表达式3*52,依照子表达式的求值顺序,有两种可能的结果,如图9-3所示。 如果乘法先执行,结果是17。如果5…...
消防一体化安全管控平台:构建消防“一张图”和APP统一管理
在城市的某个角落,一场突如其来的火灾打破了平静。熊熊烈火迅速蔓延,滚滚浓烟弥漫开来,周围群众的生命财产安全受到严重威胁。就在这千钧一发之际,消防救援队伍迅速行动,而豪越科技消防一体化安全管控平台构建的消防“…...
flow_controllers
关键点: 流控制器类型: 同步(Sync):发布操作会阻塞,直到数据被确认发送。异步(Async):发布操作非阻塞,数据发送由后台线程处理。纯同步(PureSync…...
