zoukankan      html  css  js  c++  java
  • 二、Excel操作与封装

    通过python操作excel,是因为现在主流的测试用例的数据是写在Excel当中的。

    自动化测试的用例数据:excel,csv,yaml

    openpyxl是python第三方库,专门处理excel表格的。只支持xlsx格式(2003以后)

    一、安装
    cmd命令:pip install openpyxl
     
    二、三大对象基本操作

    workbook、shee、cell

    • 工作薄(workbook):一个EXCEL文件就称为一个工作薄,一个工作薄中可以包含若干张工作表。

    • 工作表(sheet):工作薄中的每一张表格称为工作表

    • 活动表(active sheet):指当前正在操作的工作表

    • 行(row): 工作表中的每一行行首数字(1、2、3、)称为行标题;一张工作表最多有65536行

    • 列(column): 列标题:工作表中每一列列首的字母(A、B、C)称为列标题;一张工作表最多有256列

    • 单元格(cell): 工作表的每一个格称为单元格

    1)Workbook对象:工作簿操作

    已经存在的Excel文档,可以使用openpyxl模块的load_workbook函数进行读取

    wb1 = openpyxl.load_workbook('Book2.xlsx')

    sheetnames:获取工作簿中的表(列表)

    active:获取当前活跃的Worksheet

    worksheets:以列表的形式返回所有的Worksheet(表格)

    read_only:判断是否以read_only模式打开Excel文档

    encoding:获取文档的字符集编码

    properties:获取文档的元数据,如标题,创建者,创建日期等

    import openpyxl
    wb = openpyxl.load_workbook('Book2.xlsx')
    print(wb.sheetnames)
    print(wb.active)
    print(wb.worksheets)
    print(wb.read_only)
    print(wb.encoding)
    print(wb.properties)
    
    '''
    结果: ['问题统计sheet', '第二个sheet'] <Worksheet "第二个sheet"> [<Worksheet "问题统计sheet">, <Worksheet "第二个sheet">] False utf-8 <openpyxl.packaging.core.DocumentProperties object> Parameters: creator='Administrator', title=None, description=None, subject=None, identifier=None, language=None, created=datetime.datetime(2015, 6, 5, 18, 19, 34), modified=datetime.datetime(2020, 9, 15, 1, 47, 5), lastModifiedBy='admin', category=None, contentStatus=None, version=None, revision=None, keywords=None, lastPrinted=None '''

    2)Worksheet对象:工作表操作

    title:表格的标题

    max_row:表格的最大行

    min_row:表格的最小行

    max_column:表格的最大列

    min_column:表格的最小列

    rows:按行获取单元格(Cell对象) - 生成器

    columns:按列获取单元格(Cell对象) - 生成器

    values:按行获取表格的内容(数据) - 生成器 

    3)Cell对象:单元格

    row:单元格所在的行

    column:单元格坐在的列

    value:单元格的值

    coordinate:单元格的坐标

    import openpyxl
    
    wb = openpyxl.load_workbook('Book2.xlsx')
    # 选择要操作的工作表, 返回工作表对象
    sheet = wb['问题统计sheet']
    #获 取工作表的名称
    print(sheet.title)
    # 获取工作表中行和列的最值
    print(sheet.max_column)
    print(sheet.max_row)
    print(sheet.min_column)
    print(sheet.min_row)
    # 修改表的名称
    sheet.title = '修改sheet1'
    print(sheet.title)
    # 返回指定行指定列的单元格信息
    print(sheet.cell(row=1, column=2).value)
    cell = sheet['B1']
    print(cell)
    print(cell.row, cell.column, cell.value,cell.coordinate)
    
    '''
    问题统计sheet
    2
    17
    1
    1
    修改sheet1
    硬件设备不显示设备名称
    <Cell '修改sheet1'.B1>
    1 2 硬件设备不显示设备名称 B1
    '''

    三、读取Excel

    1)打开文件 得到一个工作簿

    2)选择表单

    3)通过行列读取数据

    # 导入openpyxl
    from openpyxl.worksheet.worksheet import Worksheet
    import openpyxl
    # 第一步:打开文件
    workbook = openpyxl.load_workbook('cases.xlsx')
    # 第二部:获取表单
    sheet:Worksheet = workbook['Sheet']
    # 获取某一行某一列的单元格
    # cell()方法得到的是一个单元格对象,不是case_id值
    cell = sheet.cell(row=1,column=1)
    # 获取单元格里面的数据
    print(cell.value)
    
    # 获取所有的行
    rows = list(sheet.rows)
    for row in rows:
      # row:一行数据()
      for cell in row:
        print(cell.value)

    四、excel写入

    # 读取
    print(sheet.cell(row = 2,column = 3).value)
    
    # 写入数据
    sheet.cell(row = 2,column = 3).value =  'login failed'
    
    #保存文件   语法:工作簿.save('文件路径')
    workbook.save('Book2.xlsx')
    
    #关闭文件
    workbook.close()

    五、封装excel

    import openpyxl
    
    class ExcelHandler:
    
        def __init__(self,file_path):
            '''初始化'''
            self.file_path = file_path
            self.workbook = None
    
        def open_file(self):
            '''打开文件'''
            print('打开文件{}'.format(self.file_path))
            self.workbook = openpyxl.load_workbook(self.file_path)
            return self.workbook
    
        def get_sheet(self,name):
            '''获取表格'''
            workbook = self.open_file()
            print('获取表格:{}'.format(name))
            return workbook[name]
    
        def read_data(self,name):
            '''读取数据'''
            sheet = self.get_sheet(name)
            print('读取数据')
            rows = list(sheet.rows)
            data = []
            # 获取标题
            headers = []
            for title in rows[0]:
                headers.append(title.value)
            # 添加数据
            for row in rows[1:]:
                row_data = {}
                for idx,cell in enumerate(row):
                    row_data[headers[idx]] = cell.value
                data.append(row_data)
            return data
    
        def write(self,sheet_name,row,column,data):
            '''写入单元格数据'''
            sheet = self.get_sheet(sheet_name)
            sheet.cell(row,column).value = data
            self.save()
            self.close()
    
        def save(self):
            '''保存'''
            self.workbook.save(self.file_path)
    
        def close(self):
            print('关闭文件:{}'.format(self.file_path))
            self.workbook.close()
    
    # 运行调用
    if __name__ == '__main__':
        excel = ExcelHandler('cases.xlsx')
        print(excel.read_data('login'))
  • 相关阅读:
    selenium自动登陆
    解决selenium.common.exceptions.InvalidArgumentException: Message: invalid argument: invalid 'expiry'
    python selenium 自动登陆
    Python操作CSV和Excel
    scrapy Request方法
    from lxml import etree报错
    python文件管道 下载图集
    scrapy基本爬虫,采集多页
    《全唐诗》与《全宋词》
    [转]一个程序员的哲学思考(关于编程、关于人生)
  • 原文地址:https://www.cnblogs.com/zhangjx2457/p/13671576.html
Copyright © 2011-2022 走看看