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,一经查实,立即删除!

相关文章

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 文件/目录的所有者 一般文件的创建者,谁创建了该文件,就…

从程序被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 一、环境配置 …

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,…

省市区(输入code) 转相应省市区工具类(两种方式)

方式一 通过调用接口(时间高达1s) package cn.iocoder.yudao.module.supplier.utils;import org.jsoup.Jsoup; import org.jsoup.nodes.Document; import org.jsoup.nodes.Element;import java.io.BufferedReader; import java.io.InputStreamReader; i…

Java 泛型基础

目录 1. 为什么使用泛型 2. 泛型的使用方式 2.1. 泛型类 2.2. 泛型接口 2.3. 泛型方法 3. 泛型涉及的符号 3.1. 类型通配符"?" 3.2. 占位符 T/K/V/E 3.3. 占位符T和通配符?的区别。 4. 泛型不变性 5. 泛型编译时擦除 1. 为什么使用泛型 Java 为…

基于深度学习的入侵检测系统综述文献概述

好长时间不发博客了,不是因为我摆烂了,是我换研究方向了,以后我就要搞科研了。使用博客记录我的科研故事,邀诸君共同见证我的科研之路。 1、研究方向的背景是什么? (1)互联网发展迅速&#xff…

基于ssm的蛋糕商城系统java项目jsp项目javaweb

文章目录 蛋糕商城系统一、项目演示二、项目介绍三、系统部分功能截图四、部分代码展示五、底部获取项目源码(9.9¥带走) 蛋糕商城系统 一、项目演示 蛋糕商城管理系统 二、项目介绍 系统角色 : 管理员、用户 一,管理员 管理员有…

Mixed-precision计算原理(FP32+FP16)

原文: https://lightning.ai/pages/community/tutorial/accelerating-large-language-models-with-mixed-precision-techniques/ This approach allows for efficient training while maintaining the accuracy and stability of the neural network. In more det…

【排序算法】选择排序以及需要注意的问题

选择排序的基本思想:每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完 。 第一种实现方法: void SelectSort(int* arr, int n) {for (int j 0…

【kubernetes】探索k8s集群中金丝雀发布后续 + 声明式资源管理yaml

目录 一、K8S常见的发布方式 1.1蓝绿发布 1.2灰度发布(金丝雀发布) 1.3滚动发布 二、金丝雀发布 三、声明式管理方法 3.1YAML 语法格式 3.1.1查看 api 资源版本标签 3.1.2查看资源简写 3.2YAML文件详解 3.2.1Deployment.yaml 3.2.2Pod.yaml …

C++系列-C/C++内存管理方式

🌈个人主页:羽晨同学 💫个人格言:“成为自己未来的主人~” C/C内存分布 在这篇文章开始之前,我们先以一道题目来进行引入: int glovalvar 1; static int staticGlovalvar 1; void Test() {static int staticva…