常用的方法汇总:
(1)打开工作簿:wb = openpyxl.load_workbook(‘cases.xlsx’)
(2)选取表单:sh = wb[‘Sheet1’]
(3)读取第一行、第一列的数据:ce = sh.cell(row = 1,column = 1)
(4)按行读取数据:row_data = list(sh.rows)
(5)关闭工作薄:wb.close()
import openpyxl
class Case:
pass
# 读取Excel数据的类
class ReadExcel:
def __init__(self, excel_name, sheet_name):
"""
初始化对象
:param excel_name: 文件名 ---> str
:param sheet_name: 表名 ---> str
"""
# 打开文件
self.wb = openpyxl.load_workbook(excel_name)
# 获取sheet表
self.sh = self.wb[sheet_name]
def read_data_line_list(self):
"""
按行读取数据,并存储在列表中
:return:
"""
# 将sheet表中所有行数据存储在列表,列表中每一个元素为1个元组,每一个元组代表1行的数据,元组中每一个元素为一个单元格对象
rows_data = list(self.sh.rows)
# print(rows_data)
# 定义1个空列表来存储表头信息
sheet_title = []
for title in rows_data[0]:
sheet_title.append(title.value)
# print(sheet_title)
# 定义1个空列表来存储所有行的数据信息
sheet_case_data = []
for row_data in rows_data[1:]:
# 定义1个空列表来存储单行的数据信息
data = []
for cell in row_data:
data.append(cell.value)
# print(data)
case_data = dict(list(zip(sheet_title, data)))
sheet_case_data.append(case_data)
# print(case_data)
return sheet_case_data
def read_data_line_obj(self):
"""
按行读取数据,并存储在对象中
:return:
"""
rows_data = list(self.sh.rows)
sheet_title = []
for title in rows_data[0]:
sheet_title.append(title.value)
# 定义一个空列表用来存储数据
cases = []
for row_data in rows_data[1:]:
# 定义1个空列表来存储单行的数据信息
row_case_data = []
# 定义1个对象,用来存储每一行的数据信息
case_obj = Case()
for cell in row_data:
row_case_data.append(cell.value)
case_data = list(zip(sheet_title, row_case_data))
print(case_data)
for index in case_data:
setattr(case_obj, index[0], index[1])
# 将每一个对象添加到列表中
cases.append(case_obj)
return cases
def read_data(self, list1):
"""
:param list1:为一个列表,传入的是指定读取数据的列,比如[1,2,3]
每一行[1,2,3]列的数据,读取出来就作为一条元素,放在列表中
:return:
"""
# 获取最大的行数
max_row = self.sh.max_row
# print(max_row)
cases = []
# 定义1个空列表来存储表头信息
title = []
for row in range(1, max_row+1):
if row != 1:
# 定义1个空列表来存储按列读取的每一行的数据
row_case_data = []
for column in list1:
info = self.sh.cell(row, column).value
row_case_data.append(info)
case = dict(list(zip(title, row_case_data)))
cases.append(case)
else:
for x in list1:
title_info = self.sh.cell(row, x).value
title.append(title_info)
return cases
def read_data_obj(self, list_param):
"""
:param list_param:
:return:
"""
sh_max_row = self.sh.max_row
title = []
cases = []
for row in range(1, sh_max_row+1):
if row != 1:
data = []
for column in list_param:
case_data_info = self.sh.cell(row, column).value
data.append(case_data_info)
row_case_data = list(zip(title, data))
# print(row_case_data)
case_obj = Case()
for i in row_case_data:
setattr(case_obj, i[0], i[1])
cases.append(case_obj)
else:
for tit in list_param:
title_info = self.sh.cell(row, tit).value
title.append(title_info)
return cases```