python打包excel_python之excel的封装

这篇博客介绍了如何使用Python的openpyxl库对Excel进行面向对象的封装,简化了处理Excel的操作。内容包括创建HandleExcel类,实现获取所有测试用例、获取指定行用例和在指定行写入数据的方法。博客提供了具体的代码示例,方便读者理解和应用。
摘要由CSDN通过智能技术生成

python之excel的封装

将所有excel的操作都使用面向对象的思维进行封装,即将所有操作都放入一个类中即为封装。

它将excel的处理极大程度的进行了简化操作

封装前需要先处理的操作:

1.在本地电脑新建一excel表格,将用例写入表中,可不写实际结果/最终结果,将表复制到使用的python目录下

且在excel封装前请先完成excel中数据之间关系的脚本

例如:关于运算方面的,须要先写好:

1>关于算术的加减乘除运算py文件

2>加/减/乘/除运算时的各自情况的py文件,如:会有两个正数/负数/一正一负等

openpyxl可读可写,较灵活,最常用

xlrw/xlrd只有写/读,不常用

使用openpyxl对excel进行封装:

1 from openpyxl import load_workbook #调用对excel文件进行读写操作的模块

2

3 classHandleExcel():4 """

5 定义excel类,处理excel中的数据6 """

7 def __init__(self,filename,sheetname=None):8 self.filename =filename9 self.sheetname =sheetname10 defget_cases(self):11 """

12 获取excel中的所有测试用例13 :return:14 """

15 wb = load_workbook(self.filename) #打开excel表

16 ws = wb[self.sheetname] #打开excel中的表单

17

18 #判断表单是否只有一个

19 if self.sheetname is None: #如果表单只有一个,那就选默认表单,若表单有若干个,否则就选择指定的表单

20 ws =wb.active21 else:22 ws =wb[self.sheetname]23

24 #获取表头信息,结果为嵌套元组的元组,取出元组中第一个元素,即为表头信息内容

25 head_date_tuple = tuple(ws.iter_rows(max_row=1,values_only= True))[0] #表头信息为当前表单的标题,在第一行,所以只需限制最大行为1即可 #values_only= True返回单元格的值,如果不加,返回的是一个shell对象

26 #获取除表头下面的用例信息

27 one_list=[] #指定一个空列表,后面存放每个用例行的内容

28 for one_tuple in tuple(ws.iter_rows(ws.iter_rows(min_row=2,values_only=True))): #获取所有用例存放在元组中,形成嵌套元组的元组,再将元组中的各个元素/每条用例通过for循环一个个取出

29 #从表单中的第二行算起全是用例内容,为了让所有用例/可能会添加的用例全被执行,这里不限制最大行/最大列;最小列为1,即为默认值,可不写;

30 one_list.append(dict(zip(head_date_tuple,one_tuple))) #将用例标题与用例内容一一对应为一组,依次放在空列表中,形成嵌套字典的列表

31 return one_list #返回列表,得到所有用例数据

获取某一行的用例

defget_case(self,row):"""获取指定行的用例

:param row: 行号

:return:"""

return self.get_cases()[row-1] #行数-1,即为指定行的索引

在指定行写入数据

defwrite_data(self,row,actual,result):"""在指定行写入数据

:param row: 行号

:param actual: 实际结果

:param result: 最终结果是否通过Fail/Pass

:return:"""

#同一个workbook对象,如将多个数据写入不同表单,则只有最后一个表单能写入成功---这是openpyxl的特性,无法避免。

#要写入不同的表单,须重新再定义一个workbook对象

other_wb=load_workbook(self.filename)if self.sheetname isNone:

other_ws=other_wb.activeelse:

other_ws=other_wb[self.sheetname]if isinstance(row,int) and (2 <= row <=other_ws.max_row): #行号为整数,且行号为第2行以后的数据

other_ws.cell(row=row,column=6,value=actual)

other_ws.cell(row=row,column=7,value=result)

other_wb.save(self.filename)#写入成功后保存文件

other_wb.close() #openpyxl读数据时不关闭,写数据时可关闭也可不关闭

else: #如果行号不是整数/小于2/大于最大行号了就会报错

print("传入的行号有误,请重新写入")

对自己写的脚本自测

if __name__ == '__main__': #自己先测试下上面写的封装类是否正确

filename = "cases.xlsx" #定义一个filename,指定为cases.excel文件

do_excel = HandleExcel(filename) #创建一个类,指定为filename文件名

cases = do_excel.get_cases() #获取所有用例

case = do_excel.get_case(3) #获取第三行用例

do_excel.write_data(4,"99","其他") #在第4行写入数据

pass

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值