• python之excel的封装


    python之excel的封装

    将所有excel的操作都使用面向对象的思维进行封装,即将所有操作都放入一个类中即为封装。

    它将excel的处理极大程度的进行了简化操作

    封装前需要先处理的操作:

    1.在本地电脑新建一excel表格,将用例写入表中,可不写实际结果/最终结果,将表复制到使用的python目录下

    且在excel封装前请先完成excel中数据之间关系的脚本

    例如:关于运算方面的,须要先写好:

    1>关于算术的加减乘除运算py文件

    2>加/减/乘/除运算时的各自情况的py文件,如:会有两个正数/负数/一正一负等

    openpyxl可读可写,较灵活,最常用

    xlrw/xlrd只有写/读,不常用

    使用openpyxl对excel进行封装:

     1 from openpyxl import load_workbook  # 调用对excel文件进行读写操作的模块
     2 
     3 class HandleExcel():
     4     """
     5     定义excel类,处理excel中的数据
     6     """
    7 def __init__(self,filename,sheetname=None): 8 self.filename = filename 9 self.sheetname = sheetname 10 def get_cases(self): 11 """ 12 获取excel中的所有测试用例 13 :return: 14 """ 15 wb = load_workbook(self.filename) # 打开excel表 16 ws = wb[self.sheetname] # 打开excel中的表单 17 18 # 判断表单是否只有一个 19 if self.sheetname is None: # 如果表单只有一个,那就选默认表单,若表单有若干个,否则就选择指定的表单 20 ws = wb.active 21 else: 22 ws = wb[self.sheetname] 23 24 # 获取表头信息,结果为嵌套元组的元组,取出元组中第一个元素,即为表头信息内容 25 head_date_tuple = tuple(ws.iter_rows(max_row=1,values_only= True))[0]
    #表头信息为当前表单的标题,在第一行,所以只需限制最大行为1即可 #values_only= True返回单元格的值,如果不加,返回的只是一个对象
    26 # 获取除表头下面的用例信息 27 one_list=[] #指定一个空列表,后面存放每个用例行的内容 28 for one_tuple in tuple(ws.iter_rows(ws.iter_rows(min_row=2,values_only=True))): # 获取所有用例存放在元组中,形成嵌套元组的元组,再将元组中的各个元素/每条用例通过for循环一个个取出 29 #从表单中的第二行算起全是用例内容,为了让所有用例/可能会添加的用例全被执行,这里不限制最大行/最大列;最小列为1,即为默认值,可不写; 30 one_list.append(dict(zip(head_date_tuple,one_tuple))) # 将用例标题与用例内容一一对应为一组,依次放在空列表中,形成嵌套字典的列表 31 return one_list # 返回列表,得到所有用例数据

    获取某一行的用例

        def get_case(self,row):
            """
            获取指定行的用例
            :param row: 行号
            :return:
            """
            return self.get_cases()[row-1] # 行数-1,即为指定行的索引

    在指定行写入数据

        def write_data(self,row,actual,result):
            """
            在指定行写入数据
            :param row: 行号
            :param actual: 实际结果
            :param result: 最终结果是否通过Fail/Pass
            :return:
            """
            #同一个workbook对象,如将多个数据写入不同表单,则只有最后一个表单能写入成功---这是openpyxl的特性,无法避免。
            #要写入不同的表单,须重新再定义一个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)    # 写入成功后保存文件
                other_wb.close()   #openpyxl读数据时不关闭,写数据时可关闭也可不关闭
            else:                                                # 如果行号不是整数/小于2/大于最大行号了就会报错
                print("传入的行号有误,请重新写入")

    对自己写的脚本自测

    if __name__ == '__main__':  # 自己先测试下上面写的封装类是否正确
        filename = "cases.xlsx"    # 定义一个filename,指定为cases.excel文件
        do_excel = HandleExcel(filename)  # 创建一个类,指定为filename文件名
        cases = do_excel.get_cases()  # 获取所有用例
        case = do_excel.get_case(3)   # 获取第三行用例
        do_excel.write_data(4,"99","其他") # 在第4行写入数据
        pass
  • 相关阅读:
    纯真IP数据库格式详解
    iframe框架详解
    搜刮的网址
    Drupal设置首页默认内容
    PHP开发之路之一WAMP的安装和配置
    PHP中json序列化后中文的编码显示问题
    Mysql转化blob为可读
    使用Xtrabackup来备份你的mysql
    MySQL压力测试工具mysqlslap的使用
    Cacti 监控 MySQL
  • 原文地址:https://www.cnblogs.com/xcc-/p/xcc_08.html
Copyright © 2020-2023  润新知