python操作excel文件–openpyxl模块
前言
在自动化测试工作中,想要提高测试效率,增加用例的可读性,减少代码维护成本,通常会将测试用例和测试数据进行分离,而excel又是最适合存放数据的文件,所以我们需要通过python脚本读取或者写入excel文件,下面就介绍下openpyxl模块的常用操作,如果有错误或者建议,麻烦更正指出。
openpyxl模块的使用
安装openpyxl模块
-
安装命令:pip install openpyxl,模块导入成功后我们就能在py文件中引用了
-
from openpyxl import load_workbook # 导入load_workbook函数
创建workbook三剑客(工作簿、sheet、单元格)
-
wb = load_workbook("testcase.xlsx") # 打开指定的excel文件,创建workbook对象 ws = wb["test"] # 打开指定的sheet页,创建sheet对象 cell = ws.cell(row=1, column=1) # 定位cell单元格,创建cell对象(代表第一行第一列的单元格)
workbook三剑客的常用方法
-
workbook
-
打开指定的工作表(sheet)
wb["test"] # test为sheet表单名称
-
创建工作表(sheet)
wb.create_sheet(title="test", index=1) # 创建一个名为“test”的工作表,放在第二个位置
-
保存EXCEL文件的修改内容
wb.save("test.xlsx")
-
关闭EXCEL文件
wb.close()
-
-
worksheet
-
获取工作表的最大行号和列号
print(ws.max_row, ws.max_column)
-
能获取某行、某列的cell对象
ws[1] # 第一行数据对象 ws["A"] # 第一列数据对象
-
根据坐标(excel的行、列)能准确获取cell对象
ws.cell(row=1, column=1) ws["A1"]
-
单元格写入值
ws.cell(row=1, column=1, value="test") # 在第一行第一列的单元格写入"test"字符串 wb.save("test.xlsx") # 写入excel后一定记得保存excel文件
-
获取某个范围的值
ws.iter_rows(min_row=1, max_row=2, min_col=2, max_col=4, values_only=True) # 获取第一行到第二行,第二列到第四列的值,values_only=True 代表将对象转为值,相当于cell.value
-
-
cell
-
通过以上获取的单元格对象获取单元格的值
cell.value # 获取单元格对象的值
-
封装excel的操作(读取、写入)
class OperationExcel:
"""
操作数据库
"""
def __init__(self, excel_name, sheet_name=None):
"""
构造方法,初始化实例属性
:param excel_name: excel名称
:param sheet_name: 表单名称
"""
self.excel_name = excel_name
self.sheet_name = sheet_name
self.actual = OperationConfig("EXCEL", "actual").get_int_value() # 从配置文件获取actual在第几列
self.result = OperationConfig("EXCEL", "result").get_int_value() # 从配置文件获取result在第几列
def get_data(self):
"""
获取测试数据
:return: 测试数据
"""
wb = load_workbook(self.excel_name) # 创建workbook对象
if self.sheet_name is None: # 如果sheetname为空,默认激活第一个sheet,否则激活指定的sheet
ws = wb.active
else:
ws =wb[self.sheet_name]
header_data = tuple(ws.iter_rows(max_row=1, values_only=True))[0] # 获取第一行的数据,转为元组
other_data = tuple(ws.iter_rows(min_row=2, values_only=True)) # 获取其他行的数据,转为元组
test_data = []
for data in other_data: # 将两个元组组合成字典,返回嵌套字典的列表
data_dict = dict(zip(header_data, data))
test_data.append(data_dict)
return test_data
def get_row_data(self, row):
"""
获取某一行的数据
:param row: 行数
:return: 某一行的数据
"""
return self.get_data()[row-1]
def write_data(self, row, actual, result):
"""
将数据写入excel
:param row: 行号
:param actual:实际结果
:param result:执行状态
:return:
"""
wb = load_workbook(self.excel_name)
if self.sheet_name is None:
ws = wb.active
else:
ws = wb[self.sheet_name]
if isinstance(row, int) and 2 <= row <= ws.max_row:
ws.cell(row=row, column=self.actual, value=actual)
ws.cell(row=row, column=self.result, value=result)
wb.save(self.excel_name)
else:
print("请输入行号有误,应该大于1的正整数")
总结
openpyxl模块提供了对excel进行读写、合并单元格、插入图像等多种操作,常用的就是读取和写入。
- 读取的方式有很多,可以单元格读取、单行读取、单列读取和范围内读取
- 写入单元格目前只能单个单元格写入,如果想要对多行多列进行写入可以配合for循环进行使用。
- 从EXCEL读取的数据类型,除了数字和小数外,其他获取的数据类型都是str类型。