Python与Excel之间的数据交互:简单实用的操作技巧

通过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程序,以确保你获得足够的权限来进行修改。右键点击程序或脚本,选择“以管理员身份运行”。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

经历一个春

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值