Python轻松玩转excel操作指导

目录

一、一图概览

二、表格操作

三、内容操作

四、单元格操作

五、Pandas实现表格操作

六、常见场景示例


一、一图概览

    ​    ​本文主要对openpyxl库的常用表格操作进行了梳理,熟练的运用后可极大地提升工作效率。

二、表格操作

#创建一个表格sheet.xlsx
#使用openpyxl创建工作簿
wb=workbook.workbook.Workbook()  #创建一个工作簿对象
wb.save("test.xlsx")     #在py文件同级目录下创建一个空表
wb.save(r"C:\Users\ZYP_PC\Desktop\test_python\file\test2.xlsx")  #在指定目录下创建表格sheet2.xlsx#在表格中创建子表
wb.create_sheet(title="sheet_a")  #创建子表sheet_a
wb.save("test.xlsx")             #将子表保存到工作簿test.xlsx中#从工作簿test.xlsx中删除子表sheet_b
wb=load_workbook("test.xlsx")
delete_sheet=wb["sheet_b"]   #子表不存在会报文件不存在错误
wb.remove(delete_sheet)
wb.save("test.xlsx")#修改test.xlsx中子表sheet_b的名称为sheet_a
wb=load_workbook("test.xlsx")   #加载工作簿test.xlsx
sheet_names=wb.sheetnames   #获取所有子表名称
old="sheet_b"
new="sheet_a"
ws=wb[old]     #获取old的子表
ws.title=new   #修改title属性值
wb.save("test.xlsx")

三、内容操作

#单元格内容遍历
wb=load_workbook("20240417.xlsx")
ws=wb.active
for row in ws.iter_rows(values_only=True):  #按行优先遍历,没有内容的显示为Nonefor r in row:print(r)
for col in ws.iter_cols(values_only=True):  #按列优先遍历,没有内容的显示为Nonefor c in col:print(c)#读取指定位置A1的值
A1=ws["A1"].value#读取指定行如第3行的内容
row=[]
for col in ws.iter_cols(values_only=True):row.append(col[2])   #索引从0开始,因为第3行为索引值为2
print("row",row)#读取指定列如第2列的内容
col=[]
for row in ws.iter_rows(values_only=True):col.append(row[1])   #索引从0开始,因为第二列为1
print("col",col)

内容操作之内容写入

#在工作簿test.xlsx的工作表的sheet_b中的单元格C3写入你好
#方法1(以字母加数字的方式表示坐标)
wb=load_workbook("test.xlsx")
ws=wb["sheet_b"]
ws["A3"]="你好"
wb.save("test.xlsx")  #保存修改,修改内容时表格不能打开,否则会提示无权限
#方法2(以行列数字序号表示)
wb=load_workbook("test.xlsx")
ws=wb["sheet_b"]
r=3
c=3
ws.cell(row=r,column=c,value="你好1")
wb.save("test.xlsx")  #保存修改,修改内容时表格不能打开,否则会提示无权限##逐行写入
wb=workbook.Workbook()       #创建工作簿
ws=wb.active
ws.title="运行时间与内存"  #设置默认表格名称sheet为指定的名称
ws=wb.create_sheet(title="运行时间与内存") #也可以另外创建子表
excel=r"C:\Users\ZYP_PC\Desktop\test_python\test2.xlsx"
start_row=3 #从指定行开始写入
ws.cell(row=start_row,column=1,value="工程名")
ws.cell(row=start_row,column=2,value="布局时间")
ws.cell(row=start_row,column=3,value="布线时间")
ws.cell(row=start_row,column=4,value="report_timing")
ws.cell(row=start_row,column=5,value="PR内存")
ws.append(("工程名1","布局时间","布线时间","report_timing时间","PR内存")) #各列的名称
data=[["prj1","1","22","23","34"],["prj2","11","22","23","34"],["prj3","111","22","23","34"]]
for row in data:print("row ",row)ws.append(row)
wb.save(excel)

四、单元格操作

from openpyxl import workbook
from openpyxl import load_workbook
from openpyxl.styles import Font,Alignment,Color,PatternFill
#打开指定表格进行单元格操作
excel=r"C:\Users\ZYP_PC\Desktop\test_python\test2.xlsx"
wb=load_workbook(excel)
ws=wb.active
ws=wb["测试子表"]  #进行操作的子表#插入2行
ws.insert_rows(4,2)   #从第4行的位置插入2行#插入3列
ws.insert_cols(3,1)  #从第3列开始插入1列#删除指定行
ws.delete_rows(10)  #删除第10行#删除指定列
ws.delete_cols(3)  #删除第3列#合并单元格
ws.merge_cells("A4:B4")  #将A4和B4进行合并单元格操作#取消合并单元格
ws.unmerge_cells("A4:B4") #取消将A4和B4进行合并单元格操作#设置单元格格式
font=Font(name="Arial",size=12,bold=True,italic=False,color="FF0000",) #对单元格内容进行字体格式,大小,加粗,颜色当进行设置
ws["B3"].font=font
alignment=Alignment(horizontal="center",vertical="center")  #对单元格内容进行对齐设置,例如此处为居中对齐
ws["A5"].alignment=alignment
fill=PatternFill(start_color="FFFF00",end_color="FFFF00",fill_type="solid")  #对单元格设置背景颜色,此处为黄色
ws["A5"].fill=fill
wb.save(excel)

对于单元格格式的设置中,颜色与代码的映射关系可在下面网站进行查询

https://www.bchrt.com/tools/rgbcolor/

内容的对齐方式可选值有horizontal(水平对齐方式,包括 "general", "left", "center", "right", "fill", "justify", "centerContinuous","distributed")

vertical(垂直对齐方式,包括"top", "center", "bottom", "justify", "distributed")

textRotation(文字旋转),wrapText (自动换行),shrinkToFit(自动缩放到最佳位置),indent(缩进),relativelndent(相对缩进),justifyLastLine(最后一行对齐),reading Order(读顺序对齐)

五、Pandas实现表格操作

下面针对pandas库的一些常用表格查询操作进行了梳理

##使用pandas库处理表格,pandas对于数据的处理功能更强大,更适合对数据进行各种计算
import pandas as pd
path_excel=r"C:\Users\ZYP_PC\Desktop\test_python\pandas.xlsx"  #工作簿路径
#方法1,以列表形式写入
# data = [('张三', 20, '男'),
#         ('李四', 25, '女'),
#         ('王五', 30, '男')]
#df = pd.DataFrame(data, columns=['姓名', '年龄', '性别'])
#方法2,以字典形式写入
data = {'姓名': ['张三', '李四', '王五'],'年龄': [20, 25, 30],'性别': ['男', '女', '男']}
df=pd.DataFrame(data)    #pandas不支持直接创建工作簿,data数据可以是列表,字典
df.to_excel(path_excel,index=False)   #创建表格pandas.xlsx,并将data数据写入#数据查询
path_excel=r"C:\Users\ZYP_PC\Desktop\test_python\pandas1.xlsx"
data=pd.read_excel(path_excel)  #读取表格
size=data.size    #获取表格的数据个数
shape=data.shape   #获取数据的行列数,不包含标题栏
#查看指定行和指定列的内容
print(data.loc[1:2,"年龄"])   #查找1到2行中列名为年龄的内容
# 查看前4行内容
print(data.head(4))
#查看后5行内容
print(data.tail(5))
#根据列名选择列
single_col=data["年龄"]   #选中单列
multi_col=data[["年龄","性别"]]   #选中多列
#选择行
single_row=data.iloc[0:1]   #除去标题行后的内容进行筛选
print("row",single_row)# print(data.size,data.shape)
for index,row in data.iterrows():  #按行逐条遍历print("row:",row)

六、常见场景示例

示例1 遍历整个工作簿查找包含指定内动的单元格

from openpyxl import workbook
from openpyxl import load_workbook
excel=r"C:\Users\ZYP_PC\Desktop\test_python\测试表格.xlsx"
wb=load_workbook(excel)
ws=wb.active
search_value="搜索的内容"
site=[]     #保存查找结果的单元格地址
sheet_list=[]   #保存查找结果所在的子表名称
for sheet_name in wb.sheetnames:sheet=wb[sheet_name]for row in sheet.iter_rows():for cell in row:if cell.value==search_value:site.append(cell.coordinate)cell.value=""sheet_list.append(sheet_name)

#示例2 在指定子表的指定范围内进行指定内容的查找,范围可指定行范围,列范围或区域范围

from openpyxl import workbook
from openpyxl import load_workbook
excel=r"C:\Users\ZYP_PC\Desktop\test_python\测试表格.xlsx"
wb=load_workbook(excel)
ws=wb.active
ws=wb["VCC"]     #查找的子表名称为"VCC"
search_value="INPUT"
cells=ws["A3:C6"]  #指定一个区域
# cells=ws["B:F"]  #指定B到F列
# cells=ws[2:6]   #指定第2到第6行
site=[]
for row in cells:for cell in row:if search_value in str(cell.value):site.append(cell.coordinate)
print(site)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/16169.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LINQ(四) ——使用LINQ进行对象类型初始化

总目录 C# 语法总目录 上一篇:LINQ(三) ——查询表达式/into关键字 LINQ 四 ——使用LINQ进行对象类型初始化 6. 使用LINQ进行对象初始化6.1 对象类型 6. 使用LINQ进行对象初始化 6.1 对象类型 需要声明定义一个对象类,然后使用select 配合new关键字进…

C++编程揭秘:虚表机制与ABI兼容性的实例剖析

前言: 假设你的应用程序引用的一个库某天更新了,虽然 API 和调用方式基本没变,但你需要重新编译你的应用程序才能使用这个库,那么一般说这个库是源码兼容(Source compatible);反之,如…

C语言指针相关知识(第五篇章)(非常详细版)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、sizeof和strlen对比二、数组之间的比较(依据strlen和sizeof来呈现)(一)、一维整型数组(二&#…

Value-Based Reinforcement Learning(2)

Temporal Difference (TD) Learning 上节已经提到了如果我们有DQN,那么agent就知道每一步动作如何做了,那么DQN如何训练那?这里面使用TD算法。 简略分析: 是的估计 是的估计 所以: Deep Re…

对vue3/core源码ref.ts文件API的认识过程

对toRef()API的认识的过程: 最开始认识toRef()是从vue3源码中的ref.ts看见的,右侧GPT已经举了例子 然后根据例子,在控制台输出ref对象是什么样子的: 这就是ref对象了,我们根据对象中有没有__v_isRef来判断是不是一个ref对象,当对象存在且__v_isRef true的时候他就判定为是一个…

Linux-组管理和权限管理

1 Liunx组的基本介绍: 在Linux中的每个用户必须属于一个组,不能独立于组外。在Linux中每个文件都有所有者、所在组、其他组的概念 所有者所在组其它组改变用户所在的组 2 文件/目录的所有者 一般文件的创建者,谁创建了该文件,就…

Docker in Docker(DinD)原理与实践

随着云计算和容器化技术的快速发展,Docker作为开源的应用容器引擎,已经成为企业部署和管理应用程序的首选工具。然而,在某些场景下,我们可能需要在Docker容器内部再运行一个Docker环境,即Docker in Docker(…

002 CentOS 7.9 redis-7.2.5安装及配置

https://github.com/redis/redis https://redis.io/insight/#insight-form 安装及配置 在CentOS 7.9上安装和配置Redis 7.2.5版本,可以遵循以下详细步骤: 一、准备工作 确保安装包已准备好: 确认您已经下载了redis-7.2.5.tar.gz安装包&a…

从程序被SQL注入来MyBatis 再谈 #{} 与 ${} 的区别

缘由 最近在的一个项目上面,发现有人在给我搞 SQL 注入,我真的想说我那么点资源测试用的阿里云服务器,个人估计哈,估计能抗住他的请求。狗头.png 系统上面的截图 数据库截图 说句实在的,看到这个之后我立马就是在…

游戏找不到d3dcompiler_43.dll怎么办,教你5种可靠的修复方法

在电脑使用过程中,我们经常会遇到一些错误提示,其中之一就是“找不到d3dcompiler43.dll”。这个问题通常出现在游戏或者图形处理软件中,它会导致程序无法正常运行。为了解决这个问题,我经过多次尝试和总结,找到了以下五…

idea2023的git从dev分支合并到主分支master

1.本地项目切换到主分支master 右键项目-git-Branches 依次点击项目-Remote-Origin-master-CheckOut 现在你的idea中的这个项目就是远程master分支的代码了。 2.合并dev分支到master 右击项目-git-Merge 选择origin-dev 点击Merge按钮,此时只是合并到本地的maste…

每日一题---有效的括号问题

文章目录 前言1.题目以及分析2.参考代码 前言 前面我们学习了栈的相关操作,现在我们做一道题,进行巩固 Leetcode—有效的括号 1.题目以及分析 这道题就可以使用栈进行操作,因为把最左边的括号当成栈底,最右边的是栈顶&#xff0c…

【每日刷题】Day49

【每日刷题】Day49 🥕个人主页:开敲🍉 🔥所属专栏:每日刷题🍍 🌼文章目录🌼 1. 110. 平衡二叉树 - 力扣(LeetCode) 2. 501. 二叉搜索树中的众数 - 力扣&…

基于YOLOv8的车牌检测与识别(CCPD2020数据集)

前言 本篇博客主要记录在autodl服务器中基于yolov8实现车牌检测与识别,以下记录实现全过程~ yolov8源码:GitHub - ultralytics/ultralytics: NEW - YOLOv8 🚀 in PyTorch > ONNX > OpenVINO > CoreML > TFLite 一、环境配置 …

python学习:基础语句

目录 条件语句 循环语句 for 循环 while 循环 break continue 条件语句 Python提供了 if、elif、else 来进行逻辑判断。格式如下: Pythonif 判断条件1: 执行语句1... elif 判断条件2: 执行语句2... elif 判断条件3: 执行语句3... else: 执行语句4…

C# 集合(六) —— 自定义集合Collection类

总目录 C# 语法总目录 集合六 Collection 1. 自定义集合Collection其他 1. 自定义集合Collection Collection可以对添加删除元素或者添加删除属性进行事件响应。 class Person {public string name;public int age;public Person(){this.name "";this.age 0;}pub…

ubuntu 硬盘转移

我插了两个 文件系统: ubuntu 硬盘转移: sudo dd if/dev/sdX1 of/dev/sdY1 bs128K convnoerror,sync statusprogressdd 的意思是DiskToDisk,if 是输入文件系统,of是输出文件系统。 bs是每次传递的数据大小。 注意:接…

mysql-主从同步原理

AB复制(重点) 一、什么是主从复制? 1、主从同步也叫AB复制,是用来建立一个和主数据库完全一样的数据库环境,称为从数据库;主数据库一般是准实时的业务数据库。 2、主从复制的作用 1.做数据的热备,作为后备数据库,…

如何用MySQL的SQL语句来读写硬盘目录文件

1.先确保创建表,例如起名Temp CREATE TABLE temp ( id int(11) NOT NULL AUTO_INCREMENT, image mediumblob, PRIMARY KEY (id) ) ENGINEInnoDB AUTO_INCREMENT7 DEFAULT CHARSETutf8; 注意这里的image字段用mediumblog,就可以避免出现data too …

27【Aseprite 作图】盆栽——拆解

1 橘子画法拆解 (1)浅色3 1 0;深色0 2 3 就可以构成一个橘子 (2)浅色 2 1;深色1 0 (小个橘子) (3)浅色 2 1 0;深色1 2 3 2 树根部分 (1)底部画一条横线 (2)上一行 左空2 右空1 【代表底部重心先在右】 (3)再上一行,左空1,右空1 (4)再上一行,左突出1,…