前言
- 当你做接口自动化测试时,测试用例逐渐变多情况下,如果所有测试用例都通过代码管理将会使得代码十分臃肿,而且维护成本会很高;
- 所以我们一般会通过Excel去管理所有的测试用例,而openpyxl库提供了访问Excel的方法
openpyxl简单介绍
- 一个Python库,用于读取/写入Excel 2010 xlsx 、xlsm 、xltx 、xltm 文件
- 不能操作 xls 文件
openpyxl简单概念
- Workbook:excel工作表
- Sheet:工作表中的一张表
- Cell:其中的一个单元格
- 简单步骤:打开Workbook,选中Sheet,操作Cell
openpyxl简单使用
1 import openpyxl 2 3 if __name__ == '__main__': 4 path = 'F:/imocInterface/case/imooc.xlsx' 5 # 读取excel文件 6 workbook = openpyxl.load_workbook(path) 7 # 读取所有sheet 8 sheet = workbook.get_sheet_names() 9 # 获取某个sheet 10 sheet = workbook[sheet[0]] 11 # 获取某个cell的值 12 cell_val = sheet.cell(row=2, column=2).value 13 print(cell_val)
包含知识点
- 调用 load_workbook() 等同于调用 open()
- 第8、10行代码可能浓缩成一行代码 workbook.get_sheet_by_name("sheet的名字") ,前提是你得知道sheet的命名
- cell(row, column, value=None) 三个参数分别是:行,列,值;若设置了value相当于赋值操作,会覆盖原本的值
openpyxl操作单元格
访问单个cell
1 # 方式一:获取A4单元格的值 2 cell_val = sheet['A4'].value 3 # 方式二:获取第二行,第二列的单元格的值 4 cell_val = sheet.cell(row=2, column=2).value
访问多个cell
1 # A1-B3的单元格 共6个 2 cell_range = sheet['A1':'B3'] 3 4 # A1-A3的单元格 共3个 5 cell_range = sheet['A1:A3'] 6 7 # 第十行的单元格 8 cell_range = sheet[10] 9 10 # 第1、2行的单元格 11 cell_range = sheet[1:2]
注意:以上方法返回的是都是cell对象组成tuple
获取指定范围的cell
1 # 返回行 2 for col in sheet.iter_rows(min_row=1, min_col=1, max_col=3, max_row=2): 3 for cell in col: 4 print(cell) 5 6 # 返回列 7 for col in sheet.iter_cols(min_row=1, min_col=1, max_col=3, max_row=2): 8 for cell in col: 9 print(cell)
获取指定范围cell的测试结果
# 返回行 <Cell 'Sheet1'.A1> <Cell 'Sheet1'.B1> <Cell 'Sheet1'.C1> <Cell 'Sheet1'.A2> <Cell 'Sheet1'.B2> <Cell 'Sheet1'.C2> # 返回列 <Cell 'Sheet1'.A1> <Cell 'Sheet1'.A2> <Cell 'Sheet1'.B1> <Cell 'Sheet1'.B2> <Cell 'Sheet1'.C1> <Cell 'Sheet1'.C2>
官方提醒:出于性能考虑, sheet.iter_cols() 方法不支持在只读模式使用
获取sheet内所有行和列的cell
1 # 以列的形式,获取sheet的全部cell 2 data = tuple(sheet.columns) 3 4 # 以行的形式,获取sheet的全部cell 5 data = tuple(sheet.rows) 6 7 # 获取所有数据 8 data = tuple(sheet.values) 9 # 指定返回某一行数据 10 print(data[2])
注意:sheet.rows 返回的是一个对象,需要用 tuple() 才能将对象转换成tuple
官方提醒:出于性能考虑, sheet.cloumns 方法不支持在只读模式使用
获取sheet的行数、列数
1 # 获取sheet最大行 2 data = sheet.max_row 3 4 # 获取sheet最多列 5 data = sheet.max_column 6 7 # 获取sheet最小行 8 data = sheet.min_row 9 10 # 获取sheet最小列 11 data = sheet.min_column
openpyxl写入数据
1 workbook = openpyxl.load_workbook(path) 2 sheet = workbook.active 3 sheet.cell(row=2, col=2, value="213") 4 workbook.save(filename=path)
包含知识点
- 写入数据的文件需要是可写文件,需要已关闭;若打开着excel的话无法写入会报 PermissionError: [Errno 13] Permission denied: 'XXXXX.xlsx'
- 其实就是四部曲:获取excel - 执行 workbook.active - 赋值操作 - 保存文件
- 赋值操作还可以是 sheet["B2"] = "213" ,等价于上面第三行代码
- save() 会覆盖原有文件,不会有提醒