通过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'))