通过python操作excel,是因为现在主流的测试用例的数据是写在Excel当中的。
自动化测试的用例数据:excel,csv,yaml
openpyxl是python第三方库,专门处理excel表格的。只支持xlsx格式(2003以后)
workbook、shee、cell
-
工作薄(workbook):一个EXCEL文件就称为一个工作薄,一个工作薄中可以包含若干张工作表。
-
工作表(sheet):工作薄中的每一张表格称为工作表
-
活动表(active sheet):指当前正在操作的工作表
-
行(row): 工作表中的每一行行首数字(1、2、3、)称为行标题;一张工作表最多有65536行
-
列(column): 列标题:工作表中每一列列首的字母(A、B、C)称为列标题;一张工作表最多有256列
-
单元格(cell): 工作表的每一个格称为单元格
1)Workbook对象:工作簿操作
已经存在的Excel文档,可以使用openpyxl模块的load_workbook函数进行读取
wb1 = openpyxl.load_workbook('Book2.xlsx')
sheetnames:获取工作簿中的表(列表)
active:获取当前活跃的Worksheet
worksheets:以列表的形式返回所有的Worksheet(表格)
read_only:判断是否以read_only模式打开Excel文档
encoding:获取文档的字符集编码
properties:获取文档的元数据,如标题,创建者,创建日期等
import openpyxl wb = openpyxl.load_workbook('Book2.xlsx') print(wb.sheetnames) print(wb.active) print(wb.worksheets) print(wb.read_only) print(wb.encoding) print(wb.properties) '''
结果: ['问题统计sheet', '第二个sheet'] <Worksheet "第二个sheet"> [<Worksheet "问题统计sheet">, <Worksheet "第二个sheet">] False utf-8 <openpyxl.packaging.core.DocumentProperties object> Parameters: creator='Administrator', title=None, description=None, subject=None, identifier=None, language=None, created=datetime.datetime(2015, 6, 5, 18, 19, 34), modified=datetime.datetime(2020, 9, 15, 1, 47, 5), lastModifiedBy='admin', category=None, contentStatus=None, version=None, revision=None, keywords=None, lastPrinted=None '''
2)Worksheet对象:工作表操作
title:表格的标题
max_row:表格的最大行
min_row:表格的最小行
max_column:表格的最大列
min_column:表格的最小列
rows:按行获取单元格(Cell对象) - 生成器
columns:按列获取单元格(Cell对象) - 生成器
values:按行获取表格的内容(数据) - 生成器
3)Cell对象:单元格
row:单元格所在的行
column:单元格坐在的列
value:单元格的值
coordinate:单元格的坐标
import openpyxl wb = openpyxl.load_workbook('Book2.xlsx') # 选择要操作的工作表, 返回工作表对象 sheet = wb['问题统计sheet'] #获 取工作表的名称 print(sheet.title) # 获取工作表中行和列的最值 print(sheet.max_column) print(sheet.max_row) print(sheet.min_column) print(sheet.min_row) # 修改表的名称 sheet.title = '修改sheet1' print(sheet.title) # 返回指定行指定列的单元格信息 print(sheet.cell(row=1, column=2).value) cell = sheet['B1'] print(cell) print(cell.row, cell.column, cell.value,cell.coordinate) ''' 问题统计sheet 2 17 1 1 修改sheet1 硬件设备不显示设备名称 <Cell '修改sheet1'.B1> 1 2 硬件设备不显示设备名称 B1 '''
三、读取Excel
1)打开文件 得到一个工作簿
2)选择表单
3)通过行列读取数据
# 导入openpyxl from openpyxl.worksheet.worksheet import Worksheet import openpyxl # 第一步:打开文件 workbook = openpyxl.load_workbook('cases.xlsx') # 第二部:获取表单 sheet:Worksheet = workbook['Sheet'] # 获取某一行某一列的单元格 # cell()方法得到的是一个单元格对象,不是case_id值 cell = sheet.cell(row=1,column=1) # 获取单元格里面的数据 print(cell.value) # 获取所有的行 rows = list(sheet.rows) for row in rows: # row:一行数据() for cell in row: print(cell.value)
四、excel写入
# 读取 print(sheet.cell(row = 2,column = 3).value) # 写入数据 sheet.cell(row = 2,column = 3).value = 'login failed' #保存文件 语法:工作簿.save('文件路径') workbook.save('Book2.xlsx') #关闭文件 workbook.close()
五、封装excel
import openpyxl class ExcelHandler: def __init__(self,file_path): '''初始化''' self.file_path = file_path self.workbook = None def open_file(self): '''打开文件''' print('打开文件{}'.format(self.file_path)) self.workbook = openpyxl.load_workbook(self.file_path) return self.workbook def get_sheet(self,name): '''获取表格''' workbook = self.open_file() print('获取表格:{}'.format(name)) return workbook[name] def read_data(self,name): '''读取数据''' sheet = self.get_sheet(name) print('读取数据') rows = list(sheet.rows) data = [] # 获取标题 headers = [] for title in rows[0]: headers.append(title.value) # 添加数据 for row in rows[1:]: row_data = {} for idx,cell in enumerate(row): row_data[headers[idx]] = cell.value data.append(row_data) return data def write(self,sheet_name,row,column,data): '''写入单元格数据''' sheet = self.get_sheet(sheet_name) sheet.cell(row,column).value = data self.save() self.close() def save(self): '''保存''' self.workbook.save(self.file_path) def close(self): print('关闭文件:{}'.format(self.file_path)) self.workbook.close() # 运行调用 if __name__ == '__main__': excel = ExcelHandler('cases.xlsx') print(excel.read_data('login'))