龙空技术网

Python Openpyxl (Excel读写) 初级教程

数据艺术家 289

前言:

现在各位老铁们对“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