Python轻松玩转excel操作指导

news2024/10/6 16:16:25

目录

一、一图概览

二、表格操作

三、内容操作

四、单元格操作

五、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):  #按行优先遍历,没有内容的显示为None
    for r in row:
        print(r)
for col in ws.iter_cols(values_only=True):  #按列优先遍历,没有内容的显示为None
    for 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.coloradmin.cn/o/1698947.html

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

相关文章

python数据分析-基于数据挖掘对APP评分的预测

前言 当我们谈论关于APP用户分析与电子商务之间的联系时,机器学习在这两个领域的应用变得至关重要。App用户分析和电子商务之间存在着密切的关联,因为用户行为和偏好的深入理解对于提高用户体验、增加销售以及优化产品功能至关重要。故本文基于K-近邻模…

揭秘C++ String容器:字符串操作的艺术

目录 ​编辑 引言 一、初识std::string:构造与初始化 二、字符串的操纵艺术:拼接、查找与替换 三、访问与遍历:字符的细腻触感 四、大小与容量:动态调整的智慧 五、进阶功能:探索更多可能 结语 引言 在C标准库…

弱类型解析

php中 转化为相同类型后比较 先判断数据类型后比较数值 var_dump("asdf"0);#bool(true) var_dump("asdf"1);#bool(false) var_dump("0asdf"0);#bool(true) var_dump("1asdf"1);#bool(true)1、md5撞库 例&#xff1a; <?php incl…

【Python从入门到进阶】55、使用Python轻松操作Mysql数据库

一、引言 1、MySQL数据库简介 MySQL是一个开源的关系型数据库管理系统&#xff08;RDBMS&#xff09;&#xff0c;它使用了一种名为Structured Query Language&#xff08;SQL&#xff09;的查询语言来管理数据。MySQL因其高性能、可扩展性、易用性和稳定性而广受欢迎&#x…

【论文复现】LSTM长短记忆网络

LSTM 前言网络架构总线遗忘门记忆门记忆细胞输出门 模型定义单个LSTM神经元的定义LSTM层内结构的定义 模型训练模型评估代码细节LSTM层单元的首尾的处理配置Tensorflow的GPU版本 前言 LSTM作为经典模型&#xff0c;可以用来做语言模型&#xff0c;实现类似于语言模型的功能&am…

数据结构:树(3)【二叉树链式结构实现】【二叉树的前序,中序,后序遍历】【求二叉树全部结点个数】【求二叉树叶子结点个数】【求二叉树的深度】【单值二叉树】

一.二叉树链式结构的实现 二叉树的链式结构的实现相对于顺序结构的实现就没有那么多的讲究了。就是普通的链表&#xff0c;只不过多了一个指向的指针。 具体结构如下&#xff1a; typedef int BTDataType; typedef struct BinaryTreeNode {BTDataType data;struct BinaryTre…

云计算和大数据处理

文章目录 1.云计算基础知识1.1 基本概念1.2 云计算分类 2.大数据处理基础知识2.1 基础知识2.3 大数据处理技术 1.云计算基础知识 1.1 基本概念 云计算是一种提供资源的网络&#xff0c;使用者可以随时获取“云”上的资源&#xff0c;按需求量使用&#xff0c;并且可以看成是无…

一.架构设计

架构采用 ddd 架构&#xff0c;不同于传统简单的三层的架构&#xff0c;其分层的思想对于大家日后都是很有好处的&#xff0c;会给大家的思想层级&#xff0c;提高很多。 传统的项目 现有的架构 采取ddd架构&#xff0c;给大家在复杂基础上简化保留精髓&#xff0c;一步步进行…

以太坊钱包

以太坊钱包是你通往以太坊系统的门户。它拥有你的密钥&#xff0c;并且可以代表你创建和广播交易。选择一个以太坊钱包可能很困难&#xff0c;因为有很多不同功能和设计选择。有些更适合初学者&#xff0c;有些更适合专家。即使你现在选择一个你喜欢的&#xff0c;你可能会决定…

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

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

粤嵌—2024/5/23—不同路径 ||(✔)

代码实现&#xff1a; int uniquePathsWithObstacles(int **obstacleGrid, int obstacleGridSize, int *obstacleGridColSize) {int x obstacleGridSize, y obstacleGridColSize[0];int dp[x][y];memset(dp, 0, sizeof(int) * x * y);for (int j 0; j < y && obs…

OpenUI 可视化 AI:打造令人惊艳的前端设计!

https://openui.fly.dev/ai/new 可视化UI的新时代&#xff1a;通过人工智能生成前端代码 许久未更新, 前端时间在逛github&#xff0c;发现一个挺有的意思项目&#xff0c;通过口语化方式生成前端UI页面&#xff0c;能够直观的看到效果&#xff0c;下面来给大家演示下 在现代…

智能家居完结 -- 整体设计

系统框图 前情提要: 智能家居1 -- 实现语音模块-CSDN博客 智能家居2 -- 实现网络控制模块-CSDN博客 智能家居3 - 实现烟雾报警模块-CSDN博客 智能家居4 -- 添加接收消息的初步处理-CSDN博客 智能家居5 - 实现处理线程-CSDN博客 智能家居6 -- 配置 ini文件优化设备添加-CS…

复习java5.26

面向对象和面向过程 面向过程&#xff1a;把一个任务分成一个个的步骤&#xff0c;当要执行这个任务的时候&#xff0c;只需要依次调用就行了 面向对象&#xff1a;把构成任务的事件构成一个个的对象&#xff0c;分别设计这些对象&#xff08;属性和方法&#xff09;、然后把…

国内最受欢迎的7大API供应平台对比和介绍||电商API数据采集接口简要说明

本文将介绍7款API供应平台&#xff1a;聚合数据、百度APIStore、Apix、数说聚合、通联数据、HaoService、datasift 。排名不分先后&#xff01; 免费实用的API接口 第一部分 1、聚合数据&#xff08;API数据接口_开发者数据定制&#xff09; 2、百度API Store(API集市_APIStore…

数据安全不容小觑:.hmallox勒索病毒的防范与应对

一、引言 随着网络技术的飞速发展&#xff0c;网络安全问题日益凸显&#xff0c;其中勒索病毒作为一种极具破坏性的网络攻击手段&#xff0c;已在全球范围内造成了巨大的经济损失和社会影响。在众多勒索病毒中&#xff0c;.hmallox勒索病毒以其狡猾的传播方式和强大的加密能力…

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

L01_JVM 高频知识图谱

这些知识点你都掌握了吗&#xff1f;大家可以对着问题看下自己掌握程度如何&#xff1f;对于没掌握的知识点&#xff0c;大家自行网上搜索&#xff0c;都会有对应答案&#xff0c;本文不做知识点详细说明&#xff0c;只做简要文字或图示引导。 类的生命周期 类加载器 JVM 的内存…

汽车IVI中控开发入门及进阶(二十):显示技术之LCDC

TFT LCD=Thin Film Transistor Liquid Crystal Display LCDC=LCD Controller 薄膜晶体管液晶显示器(TFT LCD)控制器在驱动现代显示技术的功能和性能方面起着关键作用。它们充当屏幕后面的大脑,仔细处理数字信号,并将其转化为精确的命令,决定每个像素的行为,决定它们的…

数据库系统概论(第5版)复习笔记

笔记的Github仓库地址 &#x1f446;这是笔记的gihub仓库&#xff0c;内容是PDF格式。 因为图片和代码块太多&#xff0c;放到CSDN太麻烦了&#xff08;比较懒&#x1f923;&#xff09; 如果感觉对各位有帮助的话欢迎点一个⭐\^o^/