Python使用openpyxl操作excel表格
一、openpyxl的使用
pip install openpyxl
第一步:打开工作簿(读取Excel文件中所有的数据保存为工作簿对象)
workbook = openpyxl.load_workbook('cases.xlsx')
第二步:选中表单对象
sheet = workbook['login']
第三步:通过表单选中表格读取数据
①读取内容(第五行第四列)
data = sheet.cell(row=5,column=4)
printa(data.value) # 获取内容用value方法
②写入内容(保存才会生效)
sheet.cell(row=7,column=3,value='("Python","123456")')
# 写入内容后,一定要保存才会生效
workbook.save('cases.xlsx')
③获取最大行和最大列
# 最大行
sheet.max_row
# 最大列
sheet.max_column
④按行获取所有的格子对象,每一行格子放入一个元组中
sheet.rows
*注意点:不要随便在表格中敲空格
二、openpyxl的封装
导包
import openpyxl
封装
class ReadExcel(object):
"""操作Excl文件"""
def __init__(self, fileName, sheetName):
"""
初始化方法
:param fileName: Excel文件名
:param sheetName: 表单名
"""
self.fileName = fileName
self.sheetName = sheetName
def open(self):
"""打开工作簿,选中表单"""
self.wb = openpyxl.load_workbook(self.fileName)
self.sh = self.wb[self.sheetName]
def save(self):
"""保存工作簿对象的方法"""
self.wb.save(self.fileName)
self.wb.close() # 这一行加不加关系不大,加了可以释放内存
1、读取数据
①将每条数据存储成字典类型
def read_data_dict(self):
"""读取数据(将每条数据存储成字典类型)"""
# 打开工作簿
self.open()
# 通过rows获取Excel文件中所有的行数据,然后把数据转成列表
rows = list(self.sh.rows)
# 表头
title = []
# 遍历Excel文件中的第一行表头信息
for i in rows[0]:
title.append(i.value)
# 用例数据列表
cases = []
# 遍历用例数据行
for row in rows[1:]:
# 定义一个列表存放每一行的数据
data = []
# 遍历每一行的数据
for r in row:
data.append(r.value)
# 把每一行的数据通过zip进行打包,然后转成字典,存入到用例数据列表中
case = dict(zip(title, data))
cases.append(case)
return cases
②将每条数据存储成CaseData类对象类型
class CaseData(object):
"""保存用例数据类"""
pass
def read_data_obj(self):
"""读取数据(将数据保存到CaseData类中)"""
self.open()
rows = list(self.sh.rows)
# 表头
title = []
# 遍历Excel文件中的第一行表头信息
for i in rows[0]:
title.append(i.value)
# 定义用例列表,用来存放用例类列表
cases = []
# 遍历用例数据行
for row in rows[1:]:
# 定义一个列表存放每一行的数据
data = []
# 遍历每一行的数据
for r in row:
data.append(r.value)
# 把每一行的数据通过zip进行打包,然后转成字典,存入到用例数据列表中
case = dict(zip(title, data))
# 定义一个用例存放类对象
case_obj = CaseData()
for k, v in case.items():
# 通过setattr()给对象添加属性
setattr(case_obj, k, v)
# 把对象添加到列表中
cases.append(case_obj)
return cases
2、写入数据
def write_data(self, row, column, value):
"""
写入数据
:param row: 行
:param column: 列
:param value: 数据
"""
self.open()
# 指定行列进行写入数据
self.sh.cell(row=row, column=column, value=value)
# 保存
self.wb.save(self.fileName)
# 关闭
self.wb.close()
**需要用到操作excel的时候可以直接进行调用,减少重复的代码量。