通过ExcelHandler类,可以对Excel文件进行简单的读取和写入操作。首先,
通过__init__方法初始化一个ExcelHandler对象,并加载指定路径的Excel文件。
使用get_sheet_content 方法获取指定名称的工作表对象
使用get_sheet方法获取指定名称的工作表对象,
使用set_cell_value方法设置指定单元格的值,
使用insert_cell_value方法增加指定单元格的值
使用delete_cell_value方法删除指定单元格的值
使用modify_cell_value方法修改指定单元格的值
通过save_changes方法保存对Excel文件的修改。
from openpyxl import load_workbook
from openpyxl.styles import PatternFill, Border, Side
from openpyxl.utils import get_column_letter
class ExcelHandler:
def __init__(self,file_path):
"""
:param file_path: Excel文件的路径
"""
self.file_path = file_path
self.workbook = load_workbook(file_path)
def get_sheet_content(self,sheet_name):
"""
获取指定名称的工作表对象
:param sheet_name: 工作表名称
:return:
"""
try:
sheet = self.workbook[sheet_name] #获取指定工作表
#读取所有单元格的值并存储到二维列表中
content = []
for row in sheet.iter_rows(values_only=True):
content.append(list(row))
for row in content:
print(row)
except Exception as e:
print("获取工作表内容时出错:",str(e))
return None
self.workbook.close() #关闭excel
def get_call_value(self,sheet_name,cell):
"""
获取指定单元格的值
:param sheet: 工作表对象
:param cell: 单元格坐标,如A1
:return: 单元格的值
"""
try:
sheet = self.workbook[sheet_name] # 获取指定工作表
value = sheet[cell].value
return value
except Exception as e:
print("获取单元格值出错",str(e))
self.workbook.close()
def insert_cell_value(self,sheet_name,cell,insert_data):
"""
增加指定单元格的值
:param sheet_name: 工作表名称
:param cell: 元格坐标,如 ‘A1’
:param insert_data: 要增加的值
:return:
"""
try:
sheet = self.workbook[sheet_name] # 获取指定工作表
current_value = sheet[cell].value #获取单元格当前的值
new_value = current_value + insert_data #将当前值与增量相加
sheet[cell].value = new_value #更新单元格的值
self.save_changes()
self.workbook.close()
return True
except Exception as e:
print("增加单元格值时出错:", str(e))
return False
def delete_cell_value(self,sheet_name,cell):
"""
删除指定单元格的值
:param sheet_name: 工作表名称
:param cell: 单元格坐标,如 ‘A1’
:return:
"""
try:
sheet = self.workbook[sheet_name] # 获取指定工作表
sheet[cell].value = None
self.save_changes()
self.workbook.close()
return True
except Exception as e:
print("删除单元格值时出错:",str(e))
return False
def modify_cell_value(self,sheet_name,cell,new_value):
"""
修改指定单元格的值
:param sheet: 工作表对象
:param cell: 单元格坐标,如A1
:param value: 要修改的新值
:return:
"""
try:
sheet = self.workbook[sheet_name] # 获取指定工作表
#修改单元格的值
sheet[cell].value = new_value
self.save_changes()
self.workbook.close()
return True
except Exception as e:
print("修改单元格的值出错:",str(e))
return False
def set_cell_value(self,sheet_name,cell,value):
"""
设置指定单元格的值
:param sheet: 工作表对象
:param cell: 单元格坐标,如A1
:param value: 新的值
:return:
"""
try:
sheet = self.workbook[sheet_name] # 获取指定工作表
#设置单元格的值
sheet[cell].value = value
self.save_changes()
self.workbook.close()
return True
except Exception as e:
print("设置单元格的值出错:",str(e))
return False
def add_row_to_excel(self,sheet_name,add_data):
"""
向指定工作表中新增一行数据
:param sheet_name: 工作表名称
:param add_data: 要新增的数据,列表形式,按照列顺序提供
:return:
"""
try:
sheet = self.workbook[sheet_name] # 获取指定工作表
#设置单元格的值
max_row = sheet.max_row #获取当前工作表的最大行数
#新增一行
for col in range(1,len(add_data) + 1):
cell = sheet[get_column_letter(col) + str(max_row + 1)]
cell.value = add_data[col - 1]
#可为新行设置样式,比如颜色
# fill = PatternFill(start_color="FFFFOO",end_color="FFFFOO",fill_type="solid")
# cell.fill = fill
#设置边框样式
border =Border(left=Side(style='thin'),right=Side(style='thin'),top=Side(style='thin'),bottom=Side(style='thin'))
cell.border = border
self.save_changes()
self.workbook.close()
return True
except Exception as e:
print("新增一行数据时出错:",str(e))
return False
def delete_row_to_excel(self,sheet_name,row_number):
"""
删除指定行
:param sheet_name: 工作表名称
:param cell: 单元格坐标,如A1
:param value: 新的值
:return:
"""
try:
sheet = self.workbook[sheet_name] # 获取指定工作表
#删除指定行
sheet.delete_rows(row_number)
self.save_changes()
self.workbook.close()
return True
except Exception as e:
print("设置单元格的值出错:",str(e))
return False
def save_changes(self):
"""
保存对excel文件的修改
:return:
"""
self.workbook.save(self.file_path)
if __name__ == '__main__':
file_path = r'D:\接口测试用例.xlsx'
excel_handler = ExcelHandler(file_path)
# excel_handler.get_sheet_content("Sheet1")
# print(excel_handler.get_call_value('Sheet1', 'A1'))
# excel_handler.set_cell_value('Sheet1', 'A2','hello')
# excel_handler.delete_cell_value('Sheet1', 'A2')
# excel_handler.insert_cell_value('Sheet1', 'A2','word')
# excel_handler.add_row_to_excel('Sheet1',['1','2','3','4','5','6'])
excel_handler.delete_row_to_excel('Sheet1',row_number=3)
如果你在通过代码修改Excel文件后,手动打开文件时没有权限进行再次修改,这可能是由于以下原因之一:
文件被其他程序占用:如果Excel文件在被其他程序(如Excel本身或其他编辑器)占用时,你可能无法进行再次修改。请确保在手动打开文件之前,关闭其他使用该文件的程序。
文件处于只读模式:如果Excel文件的属性设置为只读模式,你将无法编辑文件。请检查文件的属性,确保访问权限设置正确。
文件被锁定或受保护:如果Excel文件受到锁定或受保护,你可能需要提供密码或解锁文件才能进行修改。这是为了保护文件内容的安全性。如果你没有正确的密码或权限,你将无法进行编辑。请与文件的创建者或管理员联系以获取进一步的支持。
但我用的最简单方法:手动关掉excel文件,然后操作后再重新打开
如果你确定以上情况都不是问题,但仍然无法进行再次修改,请尝试以下解决方法:
重新启动计算机:有时,存在某些系统或程序问题,可能会导致文件访问权限出现问题。通过重新启动计算机,可以尝试解决这些问题,并重新获取对文件的访问权限。
复制文件并重命名:尝试将通过代码修改的Excel文件复制到另一个位置,并重命名为一个新文件。然后,尝试手动打开和修改这个新文件,看看是否可以正常进行修改。
使用管理员权限运行程序:以管理员身份运行你的代码或Excel程序,以确保你获得足够的权限来进行修改。右键点击程序或脚本,选择“以管理员身份运行”。