# 测试数据:事先会写好在excel
# 平常操作excel的流程(3
# 个对象):
# 工作薄(Workbook)
# 表单(Sheet)
# 单元格(Cell)
# 打开一个excel, 选择一个表单,在表单里面读取单元格的值。
# 1、准备测试数据
# 2、load_workbook模块,去打开测试数据文件,生成WorkBook对象(wb)
# 3、根据表单名称选择表单(sh):wb['表单名称']
# 4、在表单当中,获取单元格的数据:
# 4.1
# 单元格对象:sh.cell(row, colum) # 下标从1开始
# 4.2.value获取单元格的值。
# 4.3
# # 修改数据:sh.cell(row, colum).value = 新的值
# 5、得到当前表单当中,总行数和总列数
# sh.max_row # 总行数
# sh.max_column # 总列数
# 6、在表单当中,获取单元格的数据:
# 6.3
# 修改数据:sh.cell(row, colum).value = 新的值
# 7、保存数据(保存整个工作薄)
# WorkBook对象(wb).save(文件路径)
# 保存到原文件的时候,需要注意:文件没有被占用,否则会被权限不允许的错误。
# 所有读取出来的数据:字符串、数字
# import os
# file_path = os.path.join(os.path.dirname(os.path.abspath(__file__)),"login_cases.xlsx")
# # print(file_dir)
# # 1、加载excel数据文件
# from openpyxl import load_workbook
# wb = load_workbook(file_path)
# # 2、根据表单名称选择表单:wb['表单名称']
# sh = wb["login"]
# print(sh)
# # 3、单元格对象:sh.cell(row,colum) # 下标从1开始
# cel = sh.cell(2,2)
# print(cel.value)
# sh.max_row # 总行数
# sh.max_column # 总列数
# print(sh.max_row)
# print(sh.max_column)
# print("8888888888888888888888888888888888888888888888888888")
# # 6.3 修改数据:sh.cell(row,colum).value = 新的值
# sh.cell(2,2).value = "lemonban66666"
# print(sh.cell(2,2).value)
# 7、保存数据(保存整个工作薄)
# WorkBook对象(wb).save(文件路径)
# wb.save("save_as_another_excel.xlsx") 另存在
# wb.save(file_path)
from openpyxl import load_workbook
from scripts.contants import TEST_DATAS_FILES_PATH
from scripts.handle_config import do_config
class HandleExcel:
"""
定义处理excel的类
"""
def __init__(self, filename, sheetname=None):
self.filename, self.sheetname = filename, sheetname
def get_cases(self):
# 1. 打开excel
wb = load_workbook(self.filename) # 相当于一个excel文件
# 2.定位表单
# 如果你有传sapi.hellobike.com/auth?heetname, 那么就获取指定的表单
# 如果你没有传sheetname, 那么就获取第一个表单
if self.sheetname is None:
ws = wb.active
else:
ws = wb[self.sheetname]
# 获取所有的用例数据
# 如果values_only为False(默认), 那么返回的是cell对象组成的生成器(需要将其转化为列表或者元祖)
# 如果values_only为True, 那么返回的是单元格中的值组成的生成器(需要将其转化为列表或者元祖)
# one_value = ws.iter_rows(min_row=2, max_row=5, values_only=True)
values = tuple(ws.iter_rows(min_row=1, max_row=1, values_only=True))
sheet_head_tuple = values[0]
# print(sheet_head_tuple)
# value_tuple = tuple(one_value) # 每一行单元格组成的, 嵌套元祖的元祖
# 3.获取用例数据
cases_list = [] # 将用例字典信息, 存放在列表中, 这个列表就是嵌套字典列表
for data in tuple(ws.iter_rows(min_row=2, values_only=True)):
cases_list.append(dict(zip(sheet_head_tuple, data)))
return cases_list
def write_result(self, row, actual, result):
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):
if isinstance(row, int) and (row >= 2):
other_ws.cell(row=row,
column=do_config.get_int('excel', 'actual_col'),
value=actual)
other_ws.cell(row=row,
column=do_config.get_int('excel', 'result_col'),
value=result)
other_wb.save(self.filename)
else:
print("传入的行号有误,行号应大于1的整数")
def close_file(self):
self.filename.close()
if __name__ == '__main__':
one_excel = HandleExcel("/Users/renxiaoyong/PycharmProjects/poweride/datas/datas.xlsx")
values = one_excel.get_cases()
print(values)
# one_excel.write_result(12, 100, "12")
python-接口自动化-表格操作
最新推荐文章于 2024-04-12 11:39:42 发布