python之excel的封装

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

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

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

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

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

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

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

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

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

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

使用openpyxl对excel进行封装:

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

 class HandleExcel():
"""
定义excel类,处理excel中的数据
"""
def __init__(self,filename,sheetname=None):
self.filename = filename
self.sheetname = sheetname
def get_cases(self):
"""
获取excel中的所有测试用例
:return:
"""
wb = load_workbook(self.filename) # 打开excel表
ws = wb[self.sheetname] # 打开excel中的表单 # 判断表单是否只有一个
if self.sheetname is None: # 如果表单只有一个,那就选默认表单,若表单有若干个,否则就选择指定的表单
ws = wb.active
else:
ws = wb[self.sheetname] # 获取表头信息,结果为嵌套元组的元组,取出元组中第一个元素,即为表头信息内容
head_date_tuple = tuple(ws.iter_rows(max_row=1,values_only= True))[0]
#表头信息为当前表单的标题,在第一行,所以只需限制最大行为1即可 #values_only= True返回单元格的值,如果不加,返回的只是一个对象
# 获取除表头下面的用例信息
one_list=[] #指定一个空列表,后面存放每个用例行的内容
for one_tuple in tuple(ws.iter_rows(ws.iter_rows(min_row=2,values_only=True))): # 获取所有用例存放在元组中,形成嵌套元组的元组,再将元组中的各个元素/每条用例通过for循环一个个取出
#从表单中的第二行算起全是用例内容,为了让所有用例/可能会添加的用例全被执行,这里不限制最大行/最大列;最小列为1,即为默认值,可不写;
one_list.append(dict(zip(head_date_tuple,one_tuple))) # 将用例标题与用例内容一一对应为一组,依次放在空列表中,形成嵌套字典的列表
return one_list # 返回列表,得到所有用例数据

获取某一行的用例

    def get_case(self,row):
"""
获取指定行的用例
:param row: 行号
:return:
"""
return self.get_cases()[row-1] # 行数-1,即为指定行的索引

在指定行写入数据

    def write_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 is None:
other_ws = other_wb.active
else:
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,"","其他") # 在第4行写入数据
pass

python之excel的封装的更多相关文章

  1. python 全栈开发,Day86(上传文件,上传头像,CBV,python读写Excel,虚拟环境virtualenv)

    一.上传文件 上传一个图片 使用input type="file",来上传一个文件.注意:form表单必须添加属性enctype="multipart/form-data ...

  2. 震惊!当Python遇到Excel后,将开启你的认知虫洞

    本文主要内容:   1. Excel,你为什么如此强大 2. 软件开发也需要团队作战 3. Excel的集成方案演化 4. macOS特有的集成方案:applescript 5. Python与Exc ...

  3. 【Python自动化Excel】Python与pandas字符串操作

    Python之所以能够成为流行的数据分析语言,有一部分原因在于其简洁易用的字符串处理能力. Python的字符串对象封装了很多开箱即用的内置方法,处理单个字符串时十分方便:对于Excel.csv等表格 ...

  4. Python导出Excel为Lua/Json/Xml实例教程(三):终极需求

    相关链接: Python导出Excel为Lua/Json/Xml实例教程(一):初识Python Python导出Excel为Lua/Json/Xml实例教程(二):xlrd初体验 Python导出E ...

  5. Python导出Excel为Lua/Json/Xml实例教程(二):xlrd初体验

    Python导出Excel为Lua/Json/Xml实例教程(二):xlrd初体验 相关链接: Python导出Excel为Lua/Json/Xml实例教程(一):初识Python Python导出E ...

  6. Python导出Excel为Lua/Json/Xml实例教程(一):初识Python

    Python导出Excel为Lua/Json/Xml实例教程(一):初识Python 相关链接: Python导出Excel为Lua/Json/Xml实例教程(一):初识Python Python导出 ...

  7. python读取excel一例-------从工资表逐行提取信息

    在工作中经常要用到python操作excel,比如笔者公司中一个人事MM在发工资单的时候,需要从几百行的excel表中逐条的粘出信息,然后逐个的发送到员工的邮箱中.人事MM对此事不胜其烦,终于在某天请 ...

  8. 使用Python将Excel中的数据导入到MySQL

    使用Python将Excel中的数据导入到MySQL 工具 Python 2.7 xlrd MySQLdb 安装 Python 对于不同的系统安装方式不同,Windows平台有exe安装包,Ubunt ...

  9. 使用Python对Excel表格进行简单的读写操作(xlrd/xlwt)

    算是一个小技巧吧,只是进行一些简单的读写操作.让人不爽的是xlrd和xlwt是相对独立的,两个模块的对象不能通用,读写无法连贯操作,只能单独读.单独写,尚不知道如何解决. #①xlrd(读) #cod ...

随机推荐

  1. 简说Python之图形初体验

    针对孩子,最容易引起小孩的感官认知的就是图形.因此,系统运用图形编程,可以更好地让孩子喜欢上编程. turtle叫做,Turtle graphics.是python第三方的画图模块工具.可以通过imp ...

  2. 一文掌握Redis的三种集群方案

    在开发测试环境中,我们一般搭建Redis的单实例来应对开发测试需求,但是在生产环境,如果对可用性.可靠性要求较高,则需要引入Redis的集群方案.虽然现在各大云平台有提供缓存服务可以直接使用,但了解一 ...

  3. javascript的垃圾回收机制与内存管理

    一.垃圾回收机制—GC Javascript具有自动垃圾回收机制(GC:Garbage Collecation),也就是说,执行环境会负责管理代码执行过程中使用的内存. 原理:垃圾收集器会定期(周期性 ...

  4. 深入理解计算机系统 (CS:APP) 缓冲区漏洞实验 – Buffer Lab 解析

    原文地址:https://billc.io/2019/05/csapp-cachelab/ 写在前面 这是 CSAPP 官网上的第 4 个实验 buflab,也是学校要求的第三个实验.这个实验比上一个 ...

  5. oracle--触发器(转)

    转载自http://blog.csdn.net/indexman/article/details/8023740/ 触发器是许多关系数据库系统都提供的一项技术.在oracle系统里,触发器类似过程和函 ...

  6. 认识Oracle数据库系统--详细解说

    1.3 认识Oracle数据库系统 Oracle数据库是美国Oracle公司的一款关系型数据库管理系统,简称为Oracle RDBMS,是目前数据库市场上最为强大和流行的数据库系统之一.Oracle是 ...

  7. Cisco 综合配置(二)

    要求: 1. PC1 属于VLAN10,PC2属于VLAN20,网关:Master Router2. VLAN10.20 的网段为:192.168.10.0/24 . 192.168.20.0/24 ...

  8. MySQL数据库升级

    当前不少系统的数据库依旧是MySQL5.6,由于MySQL5.7及MySQL8.0在性能及安全方面有着很大的提升,因此需要升级数据库.本文通过逻辑方式.物理方式原地升级来介绍MySQL5.6 升级至M ...

  9. 题解 P2755 【洗牌问题】

    这是本人的第一篇题解 请多多宽恕 这一道题其实不要用数组 我们来观察一下n=3时的情况: 原: 1 2 3 4 5 6 4 1 5 2 6 3 2 4 6 1 3 5 1 2 3 4 5 6 我们去观 ...

  10. Contest 161

    2019-11-03 20:35:18 总体感受:本周的赛题完全是反过来的,第一题最难,第二题次之,最后的hard反而是最简单的. 注意点:心态放平稳,慢慢来.