首页 > 其他分享 >Excelopenpyxl 关键字调用封装

Excelopenpyxl 关键字调用封装

时间:2023-09-09 21:55:46浏览次数:40  
标签:封装 Excelopenpyxl self excel value 关键字 dictDefault path sheet

import openpyxl, os
from PythonUI自动化.keywords_关键字驱动.综合.common import WebUIKeys, log
from openpyxl.styles import Font, PatternFill

# log = Logs().logger()
class excelOption():
    # 获取 Excel 文件
    def __init__(self, file_path=None):
        if file_path is None:
            self.file_path = os.path.dirname(os.getcwd()).replace('\\', '/') + '/综合/WebUICase.xlsx'
        else:
            self.file_path = file_path
        self.op_excel = self.open_excel(self.file_path)

    # 打开 Excel 表格
    def open_excel(self, file_path):
        # 读取 Excel 文件
        excel = openpyxl.load_workbook(file_path)
        return excel

    # # 获取到表格中的 sheets 页
    def get_sheets(self):
        files = self.op_excel
        sheets = files.sheetnames
        return sheets

    # 读取指定的 sheet 页
    def get_sheet(self, sheet_name=None):
        if sheet_name == None:
            sheet = self.op_excel['盛世明德登录']
        else:
            sheet = self.op_excel[sheet_name]
        return sheet

    # 读取 sheet 页中的所有值
    def get_sheet_values(self):
        values = self.get_sheet().values
        return values

    # 读取表格中的内容


# 表头: 0 编号 1 事件 2定位方法    3元素路径    4输入内容    5描述    6预期将结果    7实际结果
    def write_excel(self, value, sheet, row):
        # 加粗
        bold = Font(bold=True)
        # 填充表格颜色 绿色
        if value == 'pass':
            fill = PatternFill('solid', fgColor='AACF91')
        elif value == 'false':  # 红色
            fill = PatternFill('solid', fgColor='FF0000')
        else:
            pass
        # 指定 x行x列的单元格大写,字体加粗变色
        sheet.cell(row=row, column=8).value = value.upper()
        sheet.cell(row=row, column=8).fill = fill
        sheet.cell(row=row, column=8).font = bold
        # 保存和关闭表格
        self.op_excel.save(self.file_path)
        self.op_excel.close()

    # 对每行的单元格的值进行字典对应
    def format_data(self, event, type, value, text, description, expect):
        # 创建字典, 指定键, 对应值为空
        dictDefault = dict.fromkeys(('event', 'type', 'value', 'text', 'description', 'expect'))
        dictDefault['事件'] = event
        dictDefault['type'] = type
        dictDefault['value'] = value
        dictDefault['text'] = text
        dictDefault['description'] = description
        dictDefault['expect'] = expect
        return dictDefault
    #
    def assert1(self):
        # excel 读取指定 sheet 页
        sheet = self.get_sheet()
        # 遍历 sheet 页的数据
        for value in sheet.values:
            # 如果 第一列 的数据类型是int,
            if type(value[0]) is int:
                # 将 表格单行的值 赋值给字典
                dictDefault = self.format_data(value[1], value[2], value[3], value[4], value[5], value[6])
                # 判断 事件类型, 如果是打开浏览器, 仅传入 dictDefault['text'] 的数据, 打印日志读取备注信息作为当前执行描述
                if value[1] == 'open_browser':
                    log.info(f'自动化执行中,当前执行: {value[5]}')
                    wk = WebUIKeys(value[4])
                # 如果 事件类型的值包含 assert, 调用函数并读取输入的值,获取返回值给到 status
                elif 'assert' in value[1]:
                    log.info(f'自动化执行中,当前执行: {value[5]}')
                    status = getattr(wk, value[1])(**dictDefault)
                    # 将值变色,加粗,大写后 写入 指定行 第8列单元格
                    self.write_excel(status, self.get_sheet(), value[0]+1)
                else:
                    # 其他 均按默认调用,根据需要的数据数量自动传入数据
                    log.info(f'自动化执行中,当前执行: {value[5]}')
                    getattr(wk, value[1])(**dictDefault)
            else:
                pass

if __name__ == '__main__':
    f = excelOption()
    f.assert1()

 

标签:封装,Excelopenpyxl,self,excel,value,关键字,dictDefault,path,sheet
From: https://www.cnblogs.com/zengxin-/p/17690224.html

相关文章

  • 攻城师讲故事-static关键字
    修订色号:黑、红、橙、黄、绿、蓝、紫修订时间2023年9月9日  2023年9月9日,我参加了公司晋级技术考试,看似简单的问题,却让我在abcd几个选项中徘徊。让我印象比较深的几个问题静态方法、反射等。先讲讲static吧,上午考完试本来打算写一下,吃完饭太困了睡了一觉,这会儿把大多数遇到的问......
  • 封装的思考(快捷键Alt+insert很重要,千万记住,它还能构造函数)
      这边就是封装的意义,然后操作方式和C++没差多少 然后这里是java封装的语法,看看和C++的区别 接着就是一些快捷键的使用  ......
  • bind函数的封装实现
    import{call}from'./call'/*自定义函数对象的bind方法bind(obj):返回一个新的函数,新函数内部会调用原来的函数,且this为bind()指定的第一参数的值*/exportfunctionbind(fn,obj,...args){console.log('bind()')//返回一个新函数return(...args2)......
  • 通用链表的封装
    通用链表能够存储任意类型的数据到链表中,并提供对应的操作万能指针void*C语言中任意类型的指针可以转换成void*类型void*类型指针可以转换成任意类型指针节点:void*ptr; // 数据域指针域;链表结构:头指针数量核心点:1、void*确保能存储任意类型数据2、普通......
  • 数据结构-封装队列
    list_queue.h#ifndefLIST_QUEUE_H#defineLIST_QUEUE_H#include<stdio.h>#include<stdlib.h>#include<stdbool.h>#defineTYPEint// 节点结构typedefstructNode{ TYPEdata; structNode*next;}Node;// 设计链式队列结构typedefstructList......
  • C# 封装 C++的dll
    C#的程序引用C++的dll时,首先要保证两者基于的平台一致,比如都是x64,或者都是x86的程序,否者两者之间不能直接调用,然后,要保证两者的数据类型可以相互识别,相互通用。在此重点介绍几个常用的数据转换。C++的char*和char[]数组,对应到C#的string类型C++的Handle类型,一般是一个很......
  • uniapp项目实践总结(十三)封装文件操作方法
    导语:在日常APP开发过程中,经常要进行文件的保存、读取列表以及查看和删除文件等操作,接下来就看一下具体的方法。目录原理分析方法实现实战演练案例展示原理分析主要是以下API。uni.saveFile:保存文件到本地缓存列表;uni.getSavedFileList:获取保存文件列表;uni.getSa......
  • 【设计模式】命令模式Command:在一次请求中封装多个参数
    (目录)命令模式使用频率不算太高。如果熟悉函数式编程的话,会发现命令模式完全没有使用的必要,甚至在业务开发的场景中也很少使用到。不过对于想要找到正确抽象的设计者来说,命令模式的设计思想却非常值得借鉴。命令和查询的区别:查询,获取一个不可变的结果;命令,改变状态,不一定获......
  • Java泛型对象在http请求和响应对象中的封装
    Java泛型对象在http请求和响应对象中的封装publicclassMySystemBaseResVo<T>{//注意:类的后面需要带上<T>,否则数据无法封装privateStringerr_no;privateStringerr_tips;privateTdata;publicStringgetErr_no(){returnerr_no;}......
  • React项目笔记-环境搭建、路由封装(跳转Navigate、懒加载lazy)、模块化样式引入、状态管
    环境准备nodev16.15.0npm8.5.5AntDesignofReact:https://ant.design/docs/react/introduce-cn一,创建项目npminitvite√Projectname:...vite-project-react√Selectaframework:»React√Selectavariant:»TypeScript然后使用vscode打开项目,由于......