python工具类--Excel读写

import openpyxl
from openpyxl.styles import Font


'''
python操作excel主要用到xlrd和xlwt这两个库,即xlrd是读excel,xlwt是写excel的库
利用Xlrd模块进行Excel操作,该方法支持xlsx格式,否则打开Excel时会报错。operation_excel.py
'''




class OperationXlsx:
    def __init__(self, file_path=None, sheet_name=None):
        if file_path is not None:
            self.file_path = file_path
        else:
            return None
        self.workbook = openpyxl.load_workbook(self.file_path, data_only=False)


        if sheet_name is not None:
            self.sheet_name = sheet_name
        else:
            self.sheet_name = self.workbook.get_sheet_names()[0]  # 默认获取第一个sheet的数据


        self.worksheet = self.get_data(self.sheet_name)


    def get_data(self, sheet_name):
        # 通过sheet_name获取Excel的表
        worksheet = self.workbook[sheet_name]
        # tables=worksheet .sheets()[self.sheet_id]
        return worksheet


    # 获取行数
    def get_lines(self):
        return self.worksheet.max_row


    # 获取列数
    def get_clos(self):
        return self.worksheet.max_column


    def get_cell_value(self, row, col):
        # row,col从1开始计算
        return self.worksheet.cell(row, col).value


    def get_row_values(self):
        str = []
        num = self.get_lines() - 1
        i = 1
        while i <= num:
            str.append(self.get_row_valuesById(i))
            i += 1


        return str


    # 根据列号获取某一列的内容
    def get_col_valuesById(self, col_id=None):
        str = []
        for cell in list(self.worksheet.columns)[col_id]:  # 获取第四行的数据
            str.append(cell.value)
        return str


    # 根据行号,找到改行的内容
    def get_row_valuesById(self, row):
        str = []
        for cell in list(self.worksheet.rows)[row]:  # 获取第四行的数据
            str.append(cell.value)
        return str


    # 根据首列对应的值,找到对应的行号
    def get_row_num(self, case_id):
        num = 0
        # 根据Excel的格式第0列为测试用例编号
        cols_data = self.get_col_valuesById(0)
        for col_data in cols_data:
            if case_id == col_data:
                return num
            num = num + 1
        return 0


    # 根据首列的值,找到行内容(即单条测试用例的数据)
    def get_row_valueByString(self, row_value):
        row_num = self.get_row_num(case_id=row_value)
        # 通过行号,获取行的值
        rows_data = self.get_row_valuesById(row_num)
        return rows_data


    # 根据(行,列)写入数据,测试结果写入,行列是从1开始的,可设置样式
    def write_Cell_Value(self, row, col, valus):
        """
        Font 对象参数说明:
        Font(
            name=None,      # 字体名,可以用字体名字的字符串
            strike=None,    # 删除线,True/False
            color=None,     # 文字颜色
            size=None,      # 字号
            bold=None,      # 加粗, True/False
            italic=None,    # 倾斜,Tue/False
            underline=None # 下划线, 'singleAccounting', 'double', 'single', 'doubleAccounting'
        )
        """
        # 初始化字体对象
        font_ = Font(
            size=14,
            italic=True,
            color='ff0000',
            bold=False,
            strike=None
        )
        self.worksheet.cell(row, col).font = font_
        self.worksheet.cell(row, col, valus)


        # self.worksheet["B1"]="test"  #sheet值赋值
        self.workbook.save(self.file_path)


    def __del__(self):
        self.workbook.close()




if __name__ == "__main__":
    ex = OperationXlsx("E:\工作相关\V2.1.0迭代测试用例.xlsx")
    ex.get_row_values()
    print(ex.get_lines())
    print(ex.get_clos())
    print(ex.get_row_valuesById(2))
    print(ex.get_col_valuesById(1))
    print(ex.get_row_valueByString("case_02"))
    print(ex.get_cell_value(2, 3))
    print(ex.get_row_num("case_01"))
    ex.write_Cell_Value(2, 6, "PASS")
    # ex = OperationXlsx()
    print(ex.get_cell_value(2, 6))

测试的Excel模板:

69fc814f94970e0ca8409b6eddea03ee.png

-------------------------------------最后---------------------------------

 更多软件测试相关内容请关注“软件测试道与术”公众号或扫描下方二维码

dd8d1e7ba0a9c7862582624e49013e26.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值