需要提前安装第三方库pip install openpyxl
调用读取excel方法后读取到的类似数据格式为"username:‘123456’,pwd:‘123456’",用字符串包裹的,读取excel从默认第三行开始,第一行为参数说明,第二行为key值
excel模板说明:
class FileReader:
"""
excel文件操作
"""
@staticmethod
def readExcelToDict(excel_path=EXCEL_PATH, sheet_name=SHEET_NAME):
"""
读取excel文件数据转化为Dict
:param excel_path: excel文件路径
:param sheet_name: sheet名
:return: 返回excel中读取到的数据
"""
try:
# 加载Excel文件
workbook = openpyxl.load_workbook(excel_path)
# print(workbook)
# 如果没有这个excel文件就创建
except FileNotFoundError:
workbook = openpyxl.Workbook()
# 如果传入的sheet_name变量存在于excel中sheet名
if sheet_name in workbook.sheetnames:
# 提取excel中sheet名
worksheet = workbook[sheet_name]
else:
# 如果excel文件没有对应sheet_name就创建
worksheet = workbook.create_sheet(sheet_name)
# 当你走到这里的时候,则证明,你已经拿到整个excel中的某个sheet
# 数据的格式:[{key:值1},{key:值2},{key:值2}]
# 将数据转为 字典
data = []
# 获取excel第二行作为key
key = [cell.value for cell in worksheet[2]]
# 从excel第三行开始遍历作为value,将key和value,用dict(zip())方法组装成为字典
# `iter_rows()`是worksheet对象的一个方法,用于迭代工作表中的行。它接受一些可选参数来指定迭代的区域和条件。
# `min_row = 3`表示从第三行开始迭代。
# `values_only=True`是为了只获取单元格的值,而不是包括格式等其他信息。这将返回每一行的值作为一个元组或列表,而不是包含Cell对象的生成器。
# 这意味着循环将从第三行开始,并一次迭代每一行,将每一行的值作为一个元组或列表传递给`row`变量。你可以在循环中对该行的值进行处理或操作。
for value in worksheet.iter_rows(min_row=3, values_only=True):
excel_data = dict(zip(key, value))
if excel_data["is_true"] is True:
data.append(excel_data)
workbook.close()
return data
@staticmethod
def writeDataToExcel(excel_path=EXCEL_PATH, sheet_name=SHEET_NAME, row=None, column=None, value=None):
"""
:param excel_path: excel表路径
:param sheet_name: sheet名
:param row: 行
:param col: 列
:param value: 数据
:return:
"""
try:
# 调用load_workbook方法打开excel
workbook = openpyxl.load_workbook(excel_path)
# 如果没有找到该路径excel就创建一个空文件
except FileNotFoundError:
workbook = openpyxl.Workbook()
# 选择或创建指定工作表
if sheet_name in workbook.sheetnames:
worksheet = workbook[sheet_name]
else:
worksheet = workbook.create_sheet(sheet_name)
# 写入数据到指定的行和列
worksheet.cell(row=row, column=column).value = value
# 保存修改后的文件
workbook.save(excel_path)
@staticmethod
def data_encryptAes(data):
newdata = {}
try:
for key in data:
if key[0] == "@":
# data[key] = ENCRYPTAES.encrypt(data[key])
newdata[key[1:]] = ENCRYPTDATE.encrypt(data[key])
else:
newdata[key] = data[key]
return newdata
except:
return None