Python 中处理 excel 数据的模块非常多,比如: xlxd(只读)、xlwd(只写)、openpyxl(可读写)
Excel 文件和下面的py文件代码一定要在同一个文件夹内,不然需要指定具体的 Excel 文件路径
注意:excel文件为xlsx,不能是xls再转换成xlsx格式的文件,会报错
from openpyxl import load_workbook class HandleExcel: """ 封装excel文件处理类 """ def __init__(self, filename, sheetname=None): """ 定义构造方法 :param filename: 文件名=实例属性 :param sheetname: 表单名,如果表单名只有一个可以设置为默认值 """ self.filename = filename self.sheetname = sheetname def get_cases(self): """ 获取所有的测试用例,实例方法 :return:为嵌套字典的列表 """ # 打开文件:使用load_workbook(楼的我的不可)传入文件名 wb = load_workbook(self.filename) # 返回创建一个Workbook的对象, 相当是一个excel文件 if self.sheetname is None: # 定位表单,判断是否制定表单默认空,为第一个表单 ws = wb.active # active 获取第一个表单 else: ws = wb[self.sheetname] # 否则获取指定的表单 # min_row = 最小行号,max_row=最大行号(可以不写) # min_col = 最小列号,max_col=最大列号 # values_only = 获取单元格的值 # 获取表头的信息,使用 iter_rows方法,嵌套元祖的元祖,省略最小行号 head_data_tuple = tuple(ws.iter_rows(max_row=1, values_only=True))[0] one_list = [] for one_tuple in tuple(ws.iter_rows(min_row=2, values_only=True)): # 不需要表头最小行号为2,不需要最大行号,最大最小列号 # zip 函数将表头的元祖与每一行用例所在的元祖进行拼接,dict转换为字典后,添加到列表当中 one_list = [] one_list.append(dict(zip(head_data_tuple, one_tuple))) return one_list # 为嵌套字典的列表 def get_one_case(self, row): """ 获取某一条测试用例 :param row: 行号 :return:嵌套字典的列表,使用位置进行获取 """ return self.get_cases()[row - 1] def write_result(self, row, actual, result): """ 写入数据到测试用例指定的行列中 :param row: 行号 :param actual: 实际结果 :param result: 用例执行的结果(Pass或者Fail) :return: """ # 同一个Workbook对象, 如果将数据写入到多个表单中, 那么只有最后一个表单能写入成功,需要创建不同的对象 other_wb = load_workbook(self.filename) # 创建对象 = 打开一个文件 if self.sheetname is None: other_ws = other_wb.active else: other_ws = other_wb[self.sheetname] # 写入 if isinstance(row, int) and (2 <= row <= other_ws.max_row): # 不能修改表头,下一行开始,行号大于2,小于最大的行号 other_ws.cell(row=row, column=6, value=actual) # 在第六行写入实际结果 other_ws.cell(row=row, column=7, value=result) # 在第七行写入用例执行的结果 other_wb.save(self.filename) # save 保存文件 other_wb.close() # close关闭 ----- 读数据的时候不需要关闭,写数据的时候可关闭或不关闭 else: # 如果不是整数,行号小于2,并且大于最大的行号 print("传入的行号有误, 行号应为大于1的整数") if __name__ == '__main__': # 自己写的模块自己用使用 main 函数 filename = "caseqq.xlsx" sheetname = "case" # 指定第二个表单名 # 创建一个对象,filename=文件名和sheetname=表单名可以不传 # do_excel = HandleExcel(filename) # 传文件名,不传默认第一个表单 do_excel = HandleExcel(filename, sheetname) # 获取所有的测试用例cases,使用对象调用实例方法 cases = do_excel.get_cases() print(cases) # 写入,在第二行写入"20230918", "设置Pass" do_excel.write_result(2, "20230918", "设置pass")
标签:行号,python,self,excel,param,表单,sheetname,测试用例,row From: https://www.cnblogs.com/may18/p/17711902.html