• 接口自动化--读取Excel操作(openpyxl)


    上次我们已经将requests库封装成我们想要的样子了,我们的接口自动化已经完成了最开始的一步了,接下来我们需要完成我们相应的其他模块的封装,下面简单介绍下我们在接口自动化需要用到的模块吧
    在接口自动化中我们常用的模块有requests、openpyxl、pymysql、configparser、ddt、HTMLTestRunner等一些模块
    下面介绍下openpyxl是怎么用的吧

    安装方式

      pip install openpyxl

    使用方式
    直接看代码块吧,详细描述在代码块里面的注释会写的

    1 import openpyxl
    2 
    3 
    4 # 获取wb的对象
    5 wb = openpyxl.load_workbook(r"D:	est.xlsx")
    6 # 获取工作表
    7 sheet = wb["test1"]
    8 # 读取改工作表的最大行
    9 print(sheet.max_row)

    上面的只是一个openpyxl的简单用法,获取Excel里面的数据我直接封装到类里面了
    下面的封装方法都是适用任何项目的

    import openpyxl
    
    
    class ReadExcel:
    """读取Excel"""
        def __init__(self, file_path, sheet_name):
            self.file_path = file_path
            self.sheet_name = sheet_name
    
        def open(self):
            """获取wb对象"""
            self.wb = openpyxl.load_workbook(self.file_path)
    
        def get_sheet(self):
            """
            获取sheet
            """
            self.open()
            sheet = self.wb[self.sheet_name]
            self.wb.close()
            return sheet
    
        def get_cell(self, row, col):
            """
            获取单元格对象
            """
            object = self.get_sheet().cell(row, col)
            self.wb.close()
            return object
    
        def get_cell_value(self, row, col):
            """
            获取某一个单元格的值
            """
            data = self.get_cell(row, col).value
            self.wb.close()
            return data
    
        def read(self):
            """读取所有数据"""
            # 运用列表推导式获取title
            headers = [i.value for i in self.get_sheet()[1]]
            row_data = []
            for row in range(2, self.get_sheet().max_row+1):
                data = []
                for col in range(1, self.get_sheet().max_column+1):
                    data.append(self.get_cell_value(row, col))
                # 用zip函数将两个列表组合成字典
                data_info = dict(zip(headers, data))
                row_data.append(data_info)
            self.wb.close()
            return row_data
    
        def write(self, row, col, values):
            """
            回写数据
            :param row:
            :param col:
            :param values:
            :return:
            """
            self.get_cell(row, col).value = values
            self.save()
            return self.get_cell(row, col).value
    
        def save(self):
            """
            保存
            :return:
            """
            self.wb.save(self.file_path)

    读取所有的数据展示是这样的:

     

    其实在做Excel的数据回写,一般是采用静态方法,我上面没有采用静态方法的原因是因为我的每一个wb对象使用完之后都是进行关闭的,所以不会有什么影响,但是如果说你的wb对象是在init方法中获取,建议还是回写操作用静态方法。
    --------------------------------------------------------------------------------------------------------------------------------------学无止境,欢迎大家提意见,共同交流进步----------------------------------------------------------------------------------------------------------------------------------------------------------------------

  • 相关阅读:
    C#基于引用创建单链表
    锻炼自己的思维模式
    [数据结构]C#基于数组实现泛型顺序表
    DEV Express
    [LeetCode] Combinations (bfs bad、dfs 递归 accept)
    [LeetCode] Wildcard Matching
    [LeetCode] Remove Duplicates from Sorted List II
    [LeetCode] Partition List
    [LeetCode] Scramble String(树的问题最易用递归)
    [LeetCode] Decode Ways(DP)
  • 原文地址:https://www.cnblogs.com/LCboss/p/11773223.html
Copyright © 2020-2023  润新知