前言:
现在各位老铁们对“python openpyxl”可能比较关切,我们都想要知道一些“python openpyxl”的相关知识。那么小编同时在网络上搜集了一些关于“python openpyxl””的相关文章,希望看官们能喜欢,兄弟们一起来了解一下吧!Openpyxl是一个用于读写Excel2010文件的Python第三方包。相较于xlrd,虽然没有与pandas的有效交互,但是在样式设置上的功能更加强大。其pip安装命令如下:
pip install openpyxl
Openpyxl的整体逻辑是:首先通过打开或创建的方法,实例化Excel的工作簿文件(Workbook类);接着再通过打开或创建的方法,实例化Excel的工作表(Worksheet类);然后通过坐标或其他方式定位到一个或多个单元格执行操作;最后,将操作结果存入文件中。
工作簿层级操作
Openpyxl所有关于工作表的操作都需要在实例化的工作簿(openpyxl.workbook.workbook.Workbook)中进行,因此实例化。
实例化工作簿
工作簿的实例化有两种形式,分别为创建新的工作簿和打开已有的工作簿,就相当于新建Excel文件和打开已有的Excel文件。
创建新的工作簿:
from openpyxl import Workbookwb = Workbook()
打开已有工作簿:
from openpyxl import load_workbookwb = load_workbook('test.xlsx')
存储工作簿
实例化在工作簿,无论是新建的还是打开的,在没有保存到文件之前,都只存在于内存中,一旦程序关闭就会消失,只有执行了save方法后内存中的工作簿才会被保存到本地文件。
wb.save('test.xlsx')工作表层级操作
Openpyxl所有关于行列的操作都需要在实例化的工作表(openpyxl.worksheet.worksheet.Worksheet)中进行。
工作表的实例化也有两种形式,分别为创建新的工作表和打开已有的工作簿,就相当于在Excel中创建新的工作表和选中已有的工作表。
实例化工作表
创建新的工作表:
Openpyxl中使用create_sheet方法在工作簿中创建工作表,create_sheet方法有两个参数,第一个参数为创建工作表的名称,第二个为创建工作表的位置(若不填则默认创建为最后一个工作表)。
ws1 = wb.create_sheet("Mysheet") # 创建为最后一个工作表ws2 = wb.create_sheet("Mysheet", 0) # 创建为第一个工作表ws3 = wb.create_sheet("Mysheet", -1) # 创建为倒数第二个工作表
打开已有工作表:
在Openpyxl中,工作表的名字直接以工作簿的键的形式存在,可以直接通过键来获得实例化的工作表;另外,也可以通过工作簿的active属性,直接打开正在被使用的工作表,即打开Excel文件中首先打开的工作表。
ws1 = wb["Sheet1"] # 以键的形式打开工作表ws2 = wb.active # 打开正在被使用的工作表
获取工作表名称列表
在Openpyxl中,可以使用Workbook.sheetname属性查看工作簿中所有工作表的名称。
print(wb.sheetnames) # 输出值: ['Mysheet1', 'Sheet1', 'Mysheet2', 'Mysheet']
遍历工作表
在Openpyxl中,可以直接通过遍历工作簿的方式遍历工作簿中的所有工作表。
for sheet in wb: print(sheet.title, end=" ") # 输出值: Mysheet1 Sheet1 Mysheet2 Mysheet单元格层级操作
所有对单元格内容、格式的操作,都需要在实例化的单元格(<class 'openpyxl.cell.cell.Cell'>)中进行,实例化单元格的过程就相当于在Excel中选中单元格的过程。
在新建的工作表中,是不包含任意单元格的
实例化单元格
Openpyxl中,单元格名称(例如A1)可以直接作为工作表的键获得实例化的单元格;另外,也可以通过Worksheet.cell()方法来获取实例化的单元格。
cell1 = ws4["A2"]cell2 = ws4.cell(row=1, column=1)
实例化多个单元格
Openpyxl中,可以使用切片方式获取一定范围内的单元格实例列表,这个切片可以是从单元格到单元格,也可以是从行到行或从列到列;另外,也可以使用Worksheet.rows属性和Worksheet.columns属性来遍历文件。
下面我们以3×3的工作表为例,展示各种方法获取的单元格情况。
切片:
for x in range(1, 4): for y in range(1, 4): ws4.cell(row=x, column=y)cell_range_1 = ws4['A1':'C2']cell_range_2 = ws4['A']cell_range_3 = ws4['A:B']cell_range_4 = ws4[2]cell_range_5 = ws4[2:3]print(cell_range_1) # 输出元组包含:A1、B1、C1、A2、B2、C2print(cell_range_2) # 输出元组包含:A1、A2、A3print(cell_range_3) # 输出元组包含:A1、A2、A3、B1、B2、B3print(cell_range_4) # 输出元组包含:A2、B2、C2print(cell_range_5) # 输出元组包含:A2、B2、C2、A3、B3、C3
遍历:
print(tuple(ws4.rows)) # 输出顺序:(A1,B1,C1),(A2,B2,C2),(A3,B3,C3)print(tuple(ws4.columns)) # 输出顺序:(A1,A2,A3),(B1,B2,B3),(C1,C2,C3)
读写单元格的值
在Openpyxl中,单元格对象的value属性就是单元格的值,通过读取和设置单元格的value属性可以实现单元格的读写。
cell1.value = 35print(ws4["A2"].value) # 输出值:35
读取单元格坐标
在Openpyxl中,单元格对象的row属性是单元格的行号,column属性是单元格的列号,column_letter是单元格的列的字母,coordinate是单元格的坐标名。
# cell1为A2单元格print(cell1.row) # 输出值: 2print(cell1.column) # 输出值: 1print(cell1.column_letter) # 输出值: Aprint(cell1.coordinate) # 输出值
设置单元格类型
在Openpyxl中,单元格对象的data_type属性即为单元格类型。其中数值、百分比、货币、分数、科学计数5种单元格格式均为n,日期和时间的格式均为d,字符格式为s。例如:
ws4["B1"] = 35ws4["B2"] = "我是字符串"ws4["B3"] = datetime.datetime(2020, 5, 13)print(ws4["B1"].data_type) # 输出值: nprint(ws4["B2"].data_type) # 输出值: sprint(ws4["B3"].data_type) # 输出值: d
标签: #python openpyxl