包括获取excel的sheet名字,设定excel的sheet,读excel,写excel等常规操作。

  1. from openpyxl import Workbook
  2. from openpyxl import load_workbook
  3. from openpyxl.styles import colors, Font
  4. import locale, time
  5.  
  6. class Excel(object):
  7. def __init__(self, excel_file_path):
  8. self.excel_file_path = excel_file_path # 目的在于在类的不同方法中共享此变量
  9. self.wb = load_workbook(excel_file_path) # 表格对象
  10. self.ws = self.wb[self.wb.sheetnames[0]] # 表格的第一个sheet对象
  11. # 获取第一个sheet不能用self.wb.ative,因为这个选择的是默认被打开的那个,如果表格在关闭前是打开的第三个sheet,那么下一次打开的时候就是默认在第三个sheet的
  12. # print(self.ws.title)
  13.  
  14. def get_all_sheet_names(self):
  15. return self.wb.sheetnames
  16. def get_current_sheet_names(self):
  17. return self.ws.title
  18.  
  19. def get_sheet_name_by_index(self, index):
  20. return self.wb.sheetnames[index - 1]
  21.  
  22. def get_excel_file_path(self): # 获取excel表格的路径
  23. return self.excel_file_path
  24.  
  25. def create_sheet1(self, sheet_name, position=None):
  26. try:
  27. if position:
  28. self.wb.create_sheet(sheet_name, position)
  29. else:
  30. self.wb.create_sheet(sheet_name)
  31. self.save() # 向表格里写入东西后一定要保存
  32. return True
  33. except Exception as e:
  34. print(e)
  35. return False
  36.  
  37. def set_sheet_by_name(self, sheet_name):
  38. if sheet_name not in self.wb.sheetnames:
  39. print('%s sheet不存在,请重新设置!' % sheet_name)
  40. return False
  41. self.ws = self.wb[sheet_name]
  42. return True
  43.  
  44. # 根据index设置activate sheet
  45. def set_sheet_by_index(self, index):
  46. if index >= len(self.wb.sheetnames):
  47. return False
  48. self.ws = self.wb[self.get_sheet_name_by_index(index)]
  49. return True
  50.  
  51. # 读值
  52. def get_cell_value(self, row_no, col_no, sheet_name=None):
  53. if sheet_name is not None: # 参数设置了新的sheet
  54. result = self.set_sheet_by_name(sheet_name)
  55. if result == False:
  56. return None
  57. return self.ws.cell(row_no, col_no).value
  58.  
  59. # 读某一行的值
  60. def get_row_values(self, row_no):
  61. cell_values = [] # 因为会返回多个值
  62. for cell in list(self.ws.rows)[row_no - 1]:
  63. cell_values.append(cell.value)
  64. return cell_values
  65.  
  66. #读取某个sheet的所有行中的单元格内容,使用2维的列表进行存储
  67. def get_rows_values(self,sheet_name=None):
  68. all_cell_values = [] # 所有的单元格的值均存入列表
  69. if sheet_name is not None: # 参数设置了新的sheet
  70. result = self.set_sheet_by_name(sheet_name)
  71. if result == False:
  72. return None
  73. for row in list(self.ws.rows):
  74. row_values = []
  75. for cell in row:
  76. row_values.append(cell.value)
  77. all_cell_values.append(row_values)
  78. return all_cell_values
  79.  
  80. # 读某一列的值
  81. def get_col_values(self, col_no, sheet_name=None):
  82. cell_values = [] # 因为会返回多个值
  83. if sheet_name is not None: # 参数设置了新的sheet
  84. result = self.set_sheet_by_name(sheet_name)
  85. if result == False:
  86. return None
  87. for cell in list(self.ws.columns)[col_no - 1]:
  88. cell_values.append(cell.value)
  89. return cell_values
  90.  
  91. # 读某个范围的值
  92. def get_some_values(self, min_row_no, min_col_no, max_row_no, max_col_no, sheet_name=None):
  93. if sheet_name is not None: # 参数设置了新的sheet
  94. result = self.set_sheet_by_name(sheet_name)
  95. if result == False:
  96. return None
  97. values = []
  98. for i in range(min_row_no, max_row_no + 1):
  99. row_values = [] # 用来存一行的值
  100. for j in range(min_col_no, max_col_no + 1):
  101. row_values.append(self.ws.cell(row=i, column=j).value)
  102. values.append(row_values) # 将读到的这一行值加入结果中
  103. return values
  104.  
  105. # 保存
  106. def save(self):
  107. self.wb.save(self.excel_file_path)
  108.  
  109. # 写
  110. def write_cell_value(self, row_no, col_no, value, style=None, sheet_name=None):
  111. if sheet_name is not None: # 参数设置了新的sheet
  112. result = self.set_sheet_by_name(sheet_name)
  113. if result == False:
  114. return None
  115. if style is None:
  116. style = colors.BLACK
  117. elif style == 'red':
  118. style = colors.RED
  119. elif style == 'green':
  120. style = colors.GREEN
  121. self.ws.cell(row=row_no, column=col_no).font = Font(color=style)
  122. self.ws.cell(row=row_no, column=col_no, value=value)
  123. self.save()
  124. return True
  125.  
  126. # 写时间
  127. def write_current_time(self, row_no, col_no, style=None, sheet_name=None):
  128. if sheet_name is not None: # 参数设置了新的sheet
  129. result = self.set_sheet_by_name(sheet_name)
  130. if result == False:
  131. return None
  132. if style is None:
  133. style = colors.BLACK
  134. elif style == 'red':
  135. style = colors.RED
  136. elif style == 'green':
  137. style = colors.GREEN
  138. locale.setlocale(locale.LC_ALL, 'en')
  139. locale.setlocale(locale.LC_CTYPE, 'chinese')
  140. self.ws.cell(row=row_no, column=col_no).font = Font(color=style)
  141. self.ws.cell(row=row_no, column=col_no, value=time.strftime('%Y年%m月%d日 %H时%M分%S秒'))
  142. self.save()
  143. return True
  144.  
  145. if __name__ == '__main__':
  146. from ProVar.ProjConfigVar import *
  147. excel = Excel(ExceldirPath)
  148. print(excel.get_current_sheet_names())

20191011-构建我们公司自己的自动化接口测试框架-Util的读取excel常用方法模块的更多相关文章

  1. 20191011-构建我们公司自己的自动化接口测试框架-Util的ClearData模块

    cleardata模块主要是用于在每次测试之前清除历史执行痕迹,主要代码如下: from Util.ParseExcel import * from ProVar.ProjConfigVar impo ...

  2. 20191011-构建我们公司自己的自动化接口测试框架-Util的AssertResult模块

    AssertResult主要就是进行结果断言的了,因为断言结果分2种情况,一种是断言词,一种是断言sheet,如果涉及断言sheet,则需要操作excel到对应的断言表断言所有的字段并且书写断言结果主 ...

  3. 20191011-构建我们公司自己的自动化接口测试框架-Util的TestDataHandler模块

    TestDataHandler模块主要是做测试数据的处理,包括转换数据格式和变量参数处理转换数据格式函数: data是数据,data以$()的方式识别变量,如果请求的数据有变量,则将变量用global ...

  4. 20191011-构建我们公司自己的自动化接口测试框架-Util的getTestSuite模块

    getTestSuite主要是用于在testData里面获取测试集以及对应的测试数据,包括2个主要的方法,一个是获取测试集,一个是获取测试集里面要执行的测试用例 获取测试集方法: from Util. ...

  5. 20191011-构建我们公司自己的自动化接口测试框架-Util的htmlreport模块

    生成htmlreport的模块是我在网上随意找的一个版本,主要生成的report包括接口名称,接口url,请求数据,响应数据,断言词,断言结果等 具体的htmlreport代码如下: # -*- en ...

  6. 20191011-构建我们公司自己的自动化接口测试框架-Action的request方法封装

    Action模块 封装接口request方法,根据传入的参数调用不同的请求方法,因为项目特色,我们公司的接口都是get和post方法,所以仅仅封装了get和post方法: import request ...

  7. 20191011-构建我们公司自己的自动化接口测试框架-testrun最重要的模块

    testrun模块呢就是最终自动化测试入口,调用前面封装的各个模块主要流程是: 1. 获取测试集种待执行的测试用例 2. 处理测试用例获取的数据,包括转换数据格式,处理数据的中的关联等 3. 处理完数 ...

  8. 20191011-构建我们公司自己的自动化接口测试框架-ProVar模块

    ProVar模块主要定义测试数据所在目录,以及定义变量和测试数据excel里面的column对应这样后续在进行excel操作的时候直接使用变量即可进行操作,后期excel的column有增删的时候,修 ...

  9. 20191011-构建我们公司自己的自动化接口测试框架-Config配置

    Config模块主要是为了存放的一些其他配置等的一个目录,当前目录存放日志配置文件 ################################################ [loggers] ...

随机推荐

  1. 小程序 之eval替代方案(Binding.js)

    一.下载 链接:https://pan.baidu.com/s/1D6vNSSBZI22_K1BzLEXpbg提取码:of6g 修改binding.js中的window.bind=binding为如下 ...

  2. PHP 之去除代码中的注释

    测试文件代码如下: <?php /** * Created by PhpStorm. * User: Yang * Date: 2019/10/16 * Time: 10:25 */ // 计算 ...

  3. ros资料记录,详细阅读

    ROS源码分析--子话题-catkin:https://blog.csdn.net/sukha/article/details/52460492 ROS源码分析:https://blog.csdn.n ...

  4. MyBatis中in 的使用方法

    在MyBatis中使用in关键字参数为集合时,需要使用到foreach标签. 下面详细介绍以下foreach标签的几个参数 foreach属性.png 实例: <select id=" ...

  5. easyUI的datagrid表格的使用

    实现easyUI表格的里面数据的增删改查功能.SQL使用Oracle和mybatis. 话不多说,直接上代码. 首先是前段部分的. var session = GetSession(); var pa ...

  6. TynSerial结构体序列(还原)

    TynSerial结构体序列(还原) 1)定义一个结构体 type TRec = record id, name: string; end; 2)结构体序列(还原) procedure TForm1. ...

  7. 如何在Windows Server 2008服务器中把Tomcat启动程序添加到服务中

    转自:https://blog.51cto.com/zdytesting/2314093 tomcat所在的bin目录: 添加服务: service install service_name 移除服务 ...

  8. Java开发中使用sort排序

    Java开发中使用sort排序 BaiduSpring https://baijiahao.baidu.com/s?id=1625440912158830354&wfr=spider& ...

  9. SQL 模糊查询条件的四种匹配模式

    转: 执行数据库查询时,有完整查询和模糊查询之分. 一般模糊语句格式如下: SELECT 字段 FROM 表 WHERE 某字段 LIKE 条件; 其中,关于条件,SQL提供了四种匹配模式: 1.%: ...

  10. Build Telemetry for Distributed Services之OpenCensus:Tracing2(待续)

    part 1:Tracing1 Sampling Sampling Samplers Global sampler Per span sampler Rules References