二、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')
printwb.sheetnames)
printwb.active)
printwb.worksheets)
printwb.read_only)
printwb.encoding)
printwb.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.datetime2015, 6, 5, 18, 19, 34), modified=datetime.datetime2020, 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']
#获 取工作表的名称
printsheet.title)
# 获取工作表中行和列的最值
printsheet.max_column)
printsheet.max_row)
printsheet.min_column)
printsheet.min_row)
# 修改表的名称
sheet.title = '修改sheet1'
printsheet.title)
# 返回指定行指定列的单元格信息
printsheet.cellrow=1, column=2).value)
cell = sheet['B1']
printcell)
printcell.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.cellrow=1,column=1)
# 获取单元格里面的数据
printcell.value)

# 获取所有的行
rows = listsheet.rows)
for row in rows:
  # row:一行数据)
  for cell in row:
    printcell.value)

四、excel写入

# 读取
printsheet.cellrow = 2,column = 3).value)

# 写入数据
sheet.cellrow = 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_fileself):
        '''打开文件'''
        print'打开文件{}'.formatself.file_path))
        self.workbook = openpyxl.load_workbookself.file_path)
        return self.workbook

    def get_sheetself,name):
        '''获取表格'''
        workbook = self.open_file)
        print'获取表格:{}'.formatname))
        return workbook[name]

    def read_dataself,name):
        '''读取数据'''
        sheet = self.get_sheetname)
        print'读取数据')
        rows = listsheet.rows)
        data = []
        # 获取标题
        headers = []
        for title in rows[0]:
            headers.appendtitle.value)
        # 添加数据
        for row in rows[1:]:
            row_data = {}
            for idx,cell in enumeraterow):
                row_data[headers[idx]] = cell.value
            data.appendrow_data)
        return data

    def writeself,sheet_name,row,column,data):
        '''写入单元格数据'''
        sheet = self.get_sheetsheet_name)
        sheet.cellrow,column).value = data
        self.save)
        self.close)

    def saveself):
        '''保存'''
        self.workbook.saveself.file_path)

    def closeself):
        print'关闭文件:{}'.formatself.file_path))
        self.workbook.close)

# 运行调用
if __name__ == '__main__':
    excel = ExcelHandler'cases.xlsx')
    printexcel.read_data'login'))

Published by

风君子

独自遨游何稽首 揭天掀地慰生平

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注