1.1为什么要学习excel
-
存测试数据
-
存测试结果
1.2安装openpyxl
-
python中与excel操作相关的模块
1.xlrd库:从excel中读取数据,支持xls,xlsx
2.xlwt库:对excel进行修改操作,不支持对xlsx格式的修改
3.xlutils库:在xlwt和xlrd中,对一个已存在文件进行修改
4.openpyxl:主要针对xlsx格式的excel进行读取和编辑
-
安装方式
pip install openpyxl
1.3Excel中的三大对象
-
WorkBook:工作簿对象
-
Sheet:表单对象
-
Cell:表格对象
2.openyxl对excel的操作
1.新建文件Excel文件 Workbook方法
步骤:
1.新建工作薄 openpyxl.Workbook()
2.保存为xlsx文件
#创建一个工作薄
workbook=openpyxl.Workbook()
#创建一个表单
workbook.create_sheet("sheet3")
#将工作薄保存为文件
workbook.save('test.xlsx')
注意点:如果保存的文件名存在,将会覆盖原文件
打开已存在的文件
load_workbook()
2.读写数据的方法
操作流程
-
打开一个excel文件,或者创建一个excel文件
-
获取某个表单对象
-
在表单对象中的单元格(cell)中读、写、修改数据
相关操作
-
打开文件,生成工作薄
wb=openpyxl.load_workbook('test.xlsx')
-
获取操作的表单
sh=wb['Sheet']
-
读取指定表格内的数据
#读取单元格的数据
#参数:row:行,column:列
ce=sh.cell(row=1,column=2)
print(ce.value)
#按行读取数据
columns_data=sh.rows
#按列读取数据
columns_data=sh.columns
print(list(columns_data))
-
写入数据
#保存数据
#参数:row:行,column:列 value 写入值
sheet.cell(row=1,column=8,value=199)
workbook.save("test.xlsx")
-
获取总行数
max_row=sh.max_row
-
获取总列数
max_row=sh.max_column
-
获取所有的表单
wb.sheetnames
3.常用功能封装成方法
class ReadExcel(object):
"""
读取excel数据
"""
def __init__(self, file_name, sheet_name):
"""
这个是用例初始化读取对象的
:param file_name: 文件名字 --> str
:param sheet_name: 表单名字 --> str
"""
self.file_name = file_name
# 打开工作簿
self.wb = openpyxl.load_workbook(file_name)
# 选择表单
self.sheet = self.wb[sheet_name]
# def __del__(self):
# # 关闭工作簿
# self.wb.close()
def read_data_obj(self):
"""
按行读取excel中的数据,以列表的形式返回,列表中每个对象为一条用例
excel中的表头为对象的属性,对应的数据为属性值
:return: type:list--->[case_obj1,case_obj2....],
"""
# 按行获取数据转换成列表
rows_data = list(self.sheet.rows)
# 获取表单的表头信息
titles = []
for title in rows_data[0]:
titles.append(title.value)
# 定义一个空列表用来存储所有的用例
cases = []
# 判断是否是读取所有数据
for case in rows_data[1:]:
# data用例临时存放用例数据
data = []
# 判断该单元格是否为字符串类型,
for cell in case:
data.append(cell.value)
# 将该条数据放入cases中
case_data = zip(titles, data)
# 创建一个Case类的对象,用来保存用例数据,
case_obj = Case(case_data)
cases.append(case_obj)
return cases
def readline_data_obj(self, list1=None):
"""
按指定的列,读取excel中的数据,以列表的形式返回,列表中每个对象为一条用例
excel中的表头为对象的属性,对应的数据为属性值
:param list1: list -->要读取的列[1,2....]
:return: type:list--->[case_obj1,case_obj2....],
"""
list1 = eval(list1)
if len(list1) == 0:
return self.read_data_obj()
max_r = self.sheet.max_row
# 定义一个空列表,用来存放所有用例
cases = []
# 定义一个空列表,用来存放表头
titles = []
# 遍历出所有的行
for row in range(1, max_r + 1):
# 判断是否是第一行
if row == 1:
# 遍历list1指定的列,获取表头
for column in list1:
title = self.sheet.cell(row, column).value
# 将数据添加到表头中
titles.append(title)
else:
# 定义一个空列表,用来存放该行的数据
case_data = []
for column in list1:
info = self.sheet.cell(row, column).value
case_data.append(info)
# 将该条数据和表头进行打包组合,
case = list(zip(titles, case_data))
# 创建一个用例对象,将表头和数据传进入初始化
case_obj = Case(case)
cases.append(case_obj)
return cases
def write_data(self, row, column, msg):
# 写入数据
self.sheet.cell(row=row, column=column, value=msg)
self.wb.save(self.file_name)