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):  #按行优先遍历,没有内容的显示为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)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值