python-接口自动化-表格操作

# 测试数据:事先会写好在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")
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值