import openpyxl
from openpyxl.styles import Font
'''
python操作excel主要用到xlrd和xlwt这两个库,即xlrd是读excel,xlwt是写excel的库
利用Xlrd模块进行Excel操作,该方法支持xlsx格式,否则打开Excel时会报错。operation_excel.py
'''
class OperationXlsx:
def __init__(self, file_path=None, sheet_name=None):
if file_path is not None:
self.file_path = file_path
else:
return None
self.workbook = openpyxl.load_workbook(self.file_path, data_only=False)
if sheet_name is not None:
self.sheet_name = sheet_name
else:
self.sheet_name = self.workbook.get_sheet_names()[0] # 默认获取第一个sheet的数据
self.worksheet = self.get_data(self.sheet_name)
def get_data(self, sheet_name):
# 通过sheet_name获取Excel的表
worksheet = self.workbook[sheet_name]
# tables=worksheet .sheets()[self.sheet_id]
return worksheet
# 获取行数
def get_lines(self):
return self.worksheet.max_row
# 获取列数
def get_clos(self):
return self.worksheet.max_column
def get_cell_value(self, row, col):
# row,col从1开始计算
return self.worksheet.cell(row, col).value
def get_row_values(self):
str = []
num = self.get_lines() - 1
i = 1
while i <= num:
str.append(self.get_row_valuesById(i))
i += 1
return str
# 根据列号获取某一列的内容
def get_col_valuesById(self, col_id=None):
str = []
for cell in list(self.worksheet.columns)[col_id]: # 获取第四行的数据
str.append(cell.value)
return str
# 根据行号,找到改行的内容
def get_row_valuesById(self, row):
str = []
for cell in list(self.worksheet.rows)[row]: # 获取第四行的数据
str.append(cell.value)
return str
# 根据首列对应的值,找到对应的行号
def get_row_num(self, case_id):
num = 0
# 根据Excel的格式第0列为测试用例编号
cols_data = self.get_col_valuesById(0)
for col_data in cols_data:
if case_id == col_data:
return num
num = num + 1
return 0
# 根据首列的值,找到行内容(即单条测试用例的数据)
def get_row_valueByString(self, row_value):
row_num = self.get_row_num(case_id=row_value)
# 通过行号,获取行的值
rows_data = self.get_row_valuesById(row_num)
return rows_data
# 根据(行,列)写入数据,测试结果写入,行列是从1开始的,可设置样式
def write_Cell_Value(self, row, col, valus):
"""
Font 对象参数说明:
Font(
name=None, # 字体名,可以用字体名字的字符串
strike=None, # 删除线,True/False
color=None, # 文字颜色
size=None, # 字号
bold=None, # 加粗, True/False
italic=None, # 倾斜,Tue/False
underline=None # 下划线, 'singleAccounting', 'double', 'single', 'doubleAccounting'
)
"""
# 初始化字体对象
font_ = Font(
size=14,
italic=True,
color='ff0000',
bold=False,
strike=None
)
self.worksheet.cell(row, col).font = font_
self.worksheet.cell(row, col, valus)
# self.worksheet["B1"]="test" #sheet值赋值
self.workbook.save(self.file_path)
def __del__(self):
self.workbook.close()
if __name__ == "__main__":
ex = OperationXlsx("E:\工作相关\V2.1.0迭代测试用例.xlsx")
ex.get_row_values()
print(ex.get_lines())
print(ex.get_clos())
print(ex.get_row_valuesById(2))
print(ex.get_col_valuesById(1))
print(ex.get_row_valueByString("case_02"))
print(ex.get_cell_value(2, 3))
print(ex.get_row_num("case_01"))
ex.write_Cell_Value(2, 6, "PASS")
# ex = OperationXlsx()
print(ex.get_cell_value(2, 6))
测试的Excel模板:
-------------------------------------最后---------------------------------
更多软件测试相关内容请关注“软件测试道与术”公众号或扫描下方二维码