通过封装openpyxl模块实现自己的Excel操作类

"""
excel类封装需要提供以下功能:
1、选择表单功能
2、读取一个单元格的数据功能
3、读取一行数据功能
4、读取表单中所有数据功能
5、往单元格中写入数据功能
6、保存数据功能
"""
from openpyxl import load_workbook

class MyExcel:

    # 加载excel文件。
    def __init__(self,filepath):
        # 文件存在就加载。不存在就报错。
        try:
            self.wb = load_workbook(filepath)
        except:
            print("加载excel文件失败!!请检查!")
            raise


    # 选择表单功能
    def select_sheet_by_name(self,sheet_name="Sheet1"):
        if sheet_name in self.wb.sheetnames:
            self.sh = self.wb[sheet_name]
        else:
            print("表单名称在当前excel文件中不存在,请检测表单名称!")


    # 读取一个单元格的数据功能
    def get_data_by_cell(self,row,column):
        # 判断行号、列号有效
        if self._check_num_valid(row,self.sh.max_row) is True and 
                self._check_num_valid(column,self.sh.max_column) is True:
            return self.sh.cell(row,column).value

    # 读取一行数据功能
    def get_dada_by_row(self,row):
        row_datas = []
        # 判断行号有效
        if self._check_num_valid(row, self.sh.max_row) is True:
            # 有则读取一行数据
            for col in range(1,self.sh.max_column+1):
                row_datas.append(self.sh.cell(row,col).value)
        return row_datas

    # 读取所有数据
    def get_data_all(self):
        all_datas = {}
        for row in range(1,self.sh.max_row + 1):
            row_datas = self.get_dada_by_row(row)
            all_datas["第{}行: ".format(row)] = row_datas
        return all_datas

    # 写入数据功能
    def write_data_by_cell(self,row,column,value):
        self.sh.cell(row,column).value = value

    # 保存功能
    def save_datas(self,filepath):
        try:
            self.wb.save(filepath)
        except PermissionError:
            print("要操作的文件,没有写入权限。请检查权限!")
            raise
        except FileNotFoundError:
            print("文件路径不存在,请确保路径正确!!")
            raise
        except:
            print("保存写入的数据失败!!请检查异常")
            raise

    # 检测数据有效
    def _check_num_valid(self,cur_num,max_num):
        # 类型检测
        if type(cur_num) is not int and type(cur_num) is not str:
            print("cur_num 数据类型错误!请确认为整数类型,或者为字符串类型!")
            return
        # 数字检测
        if type(cur_num) is str:
            try:
                cur_num = int(cur_num)
            except:
                print("cur_num参数非法!请确认是输入数据为整数数字!")
                return
        # 数字是否出范围
        if cur_num in range(1,max_num+1):
            return True
        else:
            print("行号或者列号,超出了目前最大行号,或者最大列号!!")
            return False


if __name__ == '__main__':

    # 对自己定义的功能类进行测试
    # 正常功能测试
    e = MyExcel("datas.xlsx") # 加载文件
    e.select_sheet_by_name("case_datas")  # 选表单
    print(e.get_dada_by_row(3)) # 读取第三行数据
    print(e.get_data_by_cell(2,3)) # 读取某一个数据
    e.write_data_by_cell(6,6,"我悄咪咪的进来了!") # 写入数据
    e.write_data_by_cell(7,7,"哼哼,我也悄悄进来了!") # 写入数据
    e.save_datas("datas.xlsx")  # 保存数据
原文地址:https://www.cnblogs.com/renshengruxi/p/12921582.html