接口自动化--读取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:\test.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方法中获取,建议还是回写操作用静态方法。
--------------------------------------------------------------------------------------------------------------------------------------学无止境,欢迎大家提意见,共同交流进步----------------------------------------------------------------------------------------------------------------------------------------------------------------------

posted @ 2019-10-31 19:32  大渝  阅读(833)  评论(0编辑  收藏  举报