openpyxl基本使用

  • 做接口自动化测试时,测试用例逐渐变多情况下,如果所有测试用例都通过代码管理将会使得代码十分臃肿,而且维护成本会很高;
  • 所以我们一般会通过Excel去管理所有的测试用例,而openpyxl库提供了访问Excel的方法

一、openpyxl介绍

  • 一个Python库,用于读取/写入Excel 2010 xlsx 、xlsm 、xltx 、xltm 文件
  • 不能操作 xls 文件

二、openpyxl简单概念

  • Workbook:excel工作表
  • Sheet:工作表中的一张表
  • Cell:其中的一个单元格
  • 简单步骤:打开Workbook,选中Sheet,操作Cell

三、使用场景

数据驱动ddt,所有的方法和业务逻辑保持不变,变的是你的接口的数据

  • 1.自动化测试用例(excel保存接口数据)
  • 2.自动化测试用例(数据库保存接口数据),学习成本高一些,熟悉数据库操作;
  • 3.办公自动化(财务)

四、具体使用

1.安装openpyxl

pip install openpyxl

2.读取excel数据
1):打开excel:创建表对象
2):获取表单:获取表单对象
3):查看单元格:获取单元格对象
4):获取单元格数据:获取单元格内容
5):关闭excel:表:关闭excel

3.写excel数据

基本使用案例

import openpyxl

# 1):打开excel:创建表对象
wb_obj = openpyxl.load_workbook(filename="test.xlsx")

# 2):获取表单:获取表单对象
sheet_obj = wb_obj["can"]

# 3):查看单元格:获取单元格对象
cell_obj = sheet_obj["B6"]

# 4):获取单元格数据:获取单元格内容
result = cell_obj.value
print(result)

# 5):关闭excel:表:关闭excel
wb_obj.close()

执行结果
openpyxl基本使用_第1张图片

五、参数解释

wb_obj = openpyxl.load_workbook(filename="test.xlsx")
#filename:文件名称(要带路径)
#read_only=FalseL:读写控制,默认是False,可读可写
#keep_vba=KEEP_VBA:是否保留vba代码
#data_only=False:只显示公式,True:自动计算公式,读出结果
#keep_links=True:保留默认外部链接

获取表单对象

sheet_obj = wb_obj["can"]

#如果不知道表单名称,可获取所有的表单名称
res=wb_obj.sheetnames
print(res)#['can', 'Sheet2', 'Sheet3']

sheet_obj = wb_obj["can"]等价于wb.get_sheet_by_name("sheet的名字") 

六、访问cell

  • 访问单个cell
cell_obj=sheet_obj["C6"]
res=cell_obj.value
print(res)

cell_obj=sheet_obj.cell(row=3,column=3)
print(cell_obj.value)
  • 行切片与列切片
import openpyxl

# 1):打开excel:创建表对象
wb_obj = openpyxl.load_workbook("test.xlsx")

# # 2):获取表单:获取表单对象
sheet_obj = wb_obj["can"]
# print(sheet_obj)
# 3):查看单元格:获取单元格对象
cell_obj = sheet_obj.cell(row=3, column=3)

# 4):查看单元格:获取单元格对象
print(cell_obj.value)


# 行切片
results = sheet_obj.iter_rows(min_row=1, max_row=4, min_col=1, max_col=3, values_only=True)
for lis in results:
    print(lis)
"""
min_row=None:行切片的起始索引,默认为1
max_row=None:行切片的结束索引,默认为1
min_col=None:列切片的起始索引,默认为1
max_col=None列切片的结束索引,默认为1
values_only=False:是否直接返回对象的属性(数据还是对象),True:返回数据,False:返回对象
"""

# 列切片(参数与行切片一致)
results1 = sheet_obj.iter_cols(min_row=1, max_row=2, min_col=1, max_col=2, values_only=True)
for lis1 in results1:
    print(lis1)

运行结果

湖北3
(1, '北京1', '湖北1')
(2, '北京2', '湖北2')
(3, '北京3', '湖北3')
(4, '北京4', '湖北4')
(1, 2)
('北京1', '北京2')
  • 获取所有的行和列
# 以列的形式,获取sheet的全部cell
data = tuple(sheet_obj.columns)

# 以行的形式,获取sheet的全部cell
data = tuple(sheet_obj.rows)

# 获取所有数据
data = tuple(sheet_obj.values)

#打印所有行的数据
print(data)

# 指定返回某一行数据
print(data[1])

wb_obj.close()

openpyxl基本使用_第2张图片

七、openpyxl写入数据

sheet=wb_obj.active
sheet.cell(row=1,column=1,value="6666")
wb_obj.save("test.xlsx")

执行结果
openpyxl基本使用_第3张图片

知识点

  • 写入数据的文件需要是可写文件,需要已关闭;
  • 若打开着excel的话无法写入会报 PermissionError: [Errno 13] Permission denied: ‘XXXXX.xlsx’
  • 其实就是四部曲:获取excel - 执行 wb_obj.active - 赋值操作 -保存文件;
  • 赋值操作还可以是 sheet["A1"] = "6666" ,等价于上面第三行代码;
  • save() 会覆盖原有文件,不会有提醒

你可能感兴趣的:(Python,python)