当前位置: 首页 > news >正文

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支持很多类型&#xff0c;不同的文本有不同的长度限制。可以根据实际需要进行选择。 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 系统设计目标 研制《数据库原理及应用技术》课程指导平台在功能上可以满足网络课堂教学活动的需要&#xff0c;在Internet上实现教学活动的各个环节。系统的基本设计原则有&#xff1a;先进性与方便性原则、功能实用性原则、开放性与可扩展性原则等。系统设计时采用较好的…...

OSHI-操作系统和硬件信息库

文章目录 引言一、快速入门1.1 OSHI的简介1.2 引入依赖1.3 涉及的包&#xff08;package&#xff09;1.4 涉及的核心类 二、操作系统信息&#xff1a;OperatingSystem2.1 总揽2.2 文件系统信息&#xff1a;FileSystem2.3 网络参数信息&#xff1a;NetworkParams2.4 进程信息&am…...

基于Java SSM框架+Vue实现企业公寓后勤管理系统项目【项目源码+论文说明】计算机毕业设计

基于java的SSM框架Vue实现企业宿舍后勤管理网站演示 摘要 21世纪的今天&#xff0c;随着社会的不断发展与进步&#xff0c;人们对于信息科学化的认识&#xff0c;已由低层次向高层次发展&#xff0c;由原来的感性认识向理性认识提高&#xff0c;管理工作的重要性已逐渐被人们所…...

stm32mp157和imx6ull在设备树节点上设置ap3216c的主要区别

stm32mp157和imx6ull在设备树节点上设置ap3216c的主要区别是&#xff0c;它们使用的不同的硬件架构和不同的设备树格式。以下是两者之间的差异&#xff1a; 硬件架构&#xff1a;stm32mp157是基于ARM Cortex-M4内核的微控制器&#xff0c;而imx6ull则是基于ARM Cortex-A7内核的…...

网工学习6-配置和管理 VLAN

6.1VLAN概念 1> 什么是 VLAN&#xff1f; VLAN 是一种在交换机上划分逻辑网段的二层技术。 2> 为什么要通过交换机划分网段&#xff1f; ① 因为交换机的端口密度比路由器高&#xff0c;并且价格比路由器低&#xff0c;所以组网成本更低。 ② 因为交换机划分网段比…...

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系列深度研究报告&#xff1a;《GPT4-Turbo技术原理研发现状及未来应用潜力分析报告》。 &#xff08;报告出品方&#xff1a;深度行业分析研究&#xff09; 报告共计&#xff1a;46页 图像理解能力提升&#xff1a;三大视觉学习方法  为打造视觉大模…...

为什么 SQL 不适合图数据库

背景 “为什么你们的图形产品不支持 SQL 或类似 SQL 的查询语言&#xff1f;” 过去&#xff0c;我们的一些客户经常问这个问题&#xff0c;但随着时间的推移&#xff0c;这个问题变得越来越少。 尽管一度被忽视&#xff0c;但图数据库拥有无缝设计并适应其底层数据结构的查询…...

【Rust日报】2023-12-02 深度学习框架 Burn 发布 v0.11.0

深度学习框架 Burn 发布 v0.11.0 深度学习框架 Burn 发布 v0.11.0&#xff0c;新版本引入了自动内核融合&#xff08;Kernel Fusion&#xff09;功能&#xff0c;大大提升了访存密集型&#xff08;memory-bound&#xff09;操作的性能。同时宣布成立 Tracel AI (https://tracel…...

MySQL性能调优-1-实际优化案例

关于SQL优化的思路&#xff0c;一般都是使用执行计划看看是否用到了索引&#xff0c;主要可能有两大类情况&#xff1a; 对业务字段建立了二级联合索引&#xff0c;但是MySQL错误地觉得走主键聚族索引全表扫描效率更高&#xff0c;而没有走二级索引 走二级索引&#xff0c;但…...

JavaScript空值合并运算符

The Nullish Coalescing Operator&#xff08;空值合并运算符&#xff09;是一种 JavaScript 的新运算符&#xff0c;用于解决默认值设定中存在的一些问题。它的语法为 ??&#xff08;两个问号&#xff09;&#xff0c;表示当左侧的操作数为 null 或 undefined 时&#xff0c…...

Spring Boot 集成 spring security 01

一、导入依赖&#xff08;pom.xml&#xff09; <?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 编程中使用字符串

理解字符串&#xff1a; C 中的字符串是使用字符数组来操作的。数组中的每个字符对应字符串的一个元素&#xff0c;字符串的结尾由空字符&#xff08;\0&#xff09;标记。这个空字符至关重要&#xff0c;因为它表示字符串的结尾&#xff0c;并允许函数确定字符串在内存中的结…...

【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是国…...

Qwen2.5-VL-7B-Instruct图文对话教程:上传图片提问、多轮追问、结果导出全流程

Qwen2.5-VL-7B-Instruct图文对话教程&#xff1a;上传图片提问、多轮追问、结果导出全流程 你是不是经常遇到这样的情况&#xff1a;拿到一张复杂的图表&#xff0c;想快速理解里面的数据&#xff1b;或者看到一张有趣的图片&#xff0c;想知道背后的故事&#xff1b;又或者需…...

【Django 实验三】个人主页开发实战

【Django 实验三】个人主页开发实战 作者&#xff1a;刘静怡 | 学号&#xff1a;F23016208 | 完成日期&#xff1a;2026年3月29日 目录 环境准备项目创建数据模型设计视图函数编写模板系统Admin 后台配置页面美化功能完善总结 一、环境准备 1.1 环境要求 Python: 3.10Django…...

如何快速掌握Fast-F1:Python赛车数据分析实战指南

如何快速掌握Fast-F1&#xff1a;Python赛车数据分析实战指南 【免费下载链接】Fast-F1 FastF1 is a python package for accessing and analyzing Formula 1 results, schedules, timing data and telemetry 项目地址: https://gitcode.com/GitHub_Trending/fa/Fast-F1 …...

DFR0554双芯片显示模块驱动解析:PCA9633与AIP31068协同控制

1. DFR0554 显示模块驱动深度解析&#xff1a;基于 PCA9633 与 AIP31068 的双芯片协同架构 DFR0554 是 DFRobot 推出的一款集成化智能显示模块&#xff0c;其核心并非单一显示控制器&#xff0c;而是由两颗功能互补的专用 IC 协同构成&#xff1a; PCA9633 LED 驱动器 与 A…...

Python 性能优化避坑指南:回归风险防控、基准压测与安全回滚实战

Python 性能优化避坑指南&#xff1a;回归风险防控、基准压测与安全回滚实战 &#x1f4cc; 性能优化&#xff0c;为什么总让人又爱又怕&#xff1f; Python 从 1991 年 Guido van Rossum 创造至今&#xff0c;已成长为全球开发者首选“胶水语言”。其简洁优雅的语法、动态类…...

TinyXML2性能优化终极指南:10个技巧让XML处理速度飙升

TinyXML2性能优化终极指南&#xff1a;10个技巧让XML处理速度飙升 【免费下载链接】tinyxml2 TinyXML2 is a simple, small, efficient, C XML parser that can be easily integrated into other programs. 项目地址: https://gitcode.com/gh_mirrors/ti/tinyxml2 TinyX…...

终极指南:ZoneMinder开源监控系统的架构设计与核心组件解析

终极指南&#xff1a;ZoneMinder开源监控系统的架构设计与核心组件解析 【免费下载链接】zoneminder ZoneMinder is a free, open source Closed-circuit television software application developed for Linux which supports IP, USB and Analog cameras. 项目地址: https…...

Bud错误处理终极指南:构建健壮Web应用的10个最佳实践

Bud错误处理终极指南&#xff1a;构建健壮Web应用的10个最佳实践 【免费下载链接】bud The Full-Stack Web Framework for Go 项目地址: https://gitcode.com/gh_mirrors/bu/bud Bud作为Go语言的全栈Web框架&#xff0c;其错误处理机制直接影响应用的稳定性和用户体验。…...

OpenClaw 中所有浏览器控制方法总览

OpenClaw 当前支持的浏览器控制方式&#xff0c;本质可以分为 3 种架构路径&#xff1a; Remote CDP&#xff08;直接协议控制&#xff09; Managed Browser&#xff08;托管浏览器&#xff09; Existing-session via Chrome DevTools MCP&#xff08;会话接管&#xff09; …...

【深度解析】CODrone:如何用高分辨率多视角数据重塑无人机旋转目标检测基准

1. CODrone数据集为何能重新定义旋转目标检测标准 当无人机在城市上空盘旋时&#xff0c;它看到的不是我们熟悉的平视视角。倾斜的建筑物、变形的车辆轮廓、微小的行人身影——这些才是无人机视觉感知的真实挑战。传统数据集用"上帝视角"的俯拍图像训练出的算法&…...