码迷,mamicode.com
首页 > 其他好文 > 详细

封装openpyxl,更加方便处理 excel(中级)

时间:2020-01-11 22:10:34      阅读:70      评论:0      收藏:0      [点我收藏+]

标签:exce   and   col   选择   cep   静态方法   tar   框架   class   

 

学习了基础的 Excel 操作后,对其进行了封装, 为了使用框架时更加方便的调用

废话不多说,直接上代码,需要可以直接使用(写了详细的备注)

 

import openpyxl


class ExcelHandle(object):
    """ excel封装 """

    def __init__(self):
        """ 也可以把文件名和表名写到init里面 """
        pass

    def select_form(self, file_name, sheet_name):
        """
        选择表单,判断传入的 sheet_name 是整数根据索引,不是整数根据表单名处理
        :param file_name: excel文件路径
        :param sheet_name: 表单的名字或者索引
        """
        wb = openpyxl.load_workbook(file_name)
        if isinstance(sheet_name, int):
            try:
                return wb.worksheets[sheet_name]
            except IndexError:
                print(输入的表单索引有误)
        elif isinstance(sheet_name, str):
            try:
                return wb[sheet_name]
            except KeyError:
                print(输入的表单名称有误)
        else:
            print(输入有误,请输入表单索引或表单名称)

    def read_one_data(self, file_name, sheet_name, row, column):
        """
        读取 一个单元格的数据 , 根据第几行第几个获取数据
        :param file_name: excel文件路径
        :param sheet_name: 表单的名字或者索引
        :param row: 行
        :param column: 列
        :return:
        """
        sheet = self.select_form(file_name, sheet_name)
        return sheet.cell(row, column).value

    def read_line(self, file_name, sheet_name, line):
        """
        读取 一列单元格的数据
        :param file_name: excel文件路径
        :param sheet_name: 表单的名字或者索引
        :param line:
        """
        # 调用上面选择表单
        sheet = self.select_form(file_name, sheet_name)
        # 获取单元格
        sheet_data = sheet[line]
        # 元组 (Cell(1,1), Cell(1,2)
        data = []
        for c in sheet_data:
            data.append(c.value)
        return data

    def read_all(self, file_name, sheet_name, start_row=2, start_column=1):
        """
        读取所有的数据,
        :param file_name: excel文件路径
        :param sheet_name: 表单的名字或者索引
        :param start_row: 从第几‘行‘开始
        :param start_column: 从第几‘列‘开始
        :return:
        """
        sheet = self.select_form(file_name, sheet_name)
        # 使用 列表推导式  列表中的索引开始是从 1 开始, 而不是 0
        header = [colmn.value for colmn in sheet[1]]
        data = []
        # sheet.max_row 获取最大行数
        for row in range(start_row, sheet.max_row + 1):
            row_data = []
            # sheet.max_column 获取最大列数
            for column in range(start_column, sheet.max_column + 1):
                row_data.append(sheet.cell(row, column).value)
            # 把标题头和输入组合成字典 把两个列表组合成字典
            row_data = dict(zip(header, row_data))
            data.append(row_data)
        return data

    @staticmethod
    def write(file_name, sheet_name, row, column, data):
        """
        保存数据,使用 静态方法 一次修改一个
        :param file_name: excel文件路径
        :param sheet_name: 表单的名字
        :param row: 修改数据的‘行‘
        :param column: 修改数据的‘列‘
        :param data: 修改的内容
        :return:
        """
        wb = openpyxl.load_workbook(file_name)
        # todo 使用 get_sheet_by_name 会告诉你这个函数被弃用了
        #  sheet = wb.get_sheet_by_name(sheet_name)
        # 建议使用
        sheet = wb[sheet_name]
        sheet.cell(row, column).value = data
        # 保存关闭
        wb.save(file_name)
        wb.close()


if __name__ == __main__:
    eh = ExcelHandle()
    # 获取表单
    print(eh.select_form(rD:\data.xlsx, 0))
    # 一个数据
    print(eh.read_one_data(rD:\data.xlsx, 0, 1, 1))
    # 获取所有数据
    print(eh.read_all(rD:\data.xlsx, 0))
    # 保存数据
    eh.write(rD:\data.xlsx, Sheet1, 1, 1, URL)

封装openpyxl,更加方便处理 excel(中级)

标签:exce   and   col   选择   cep   静态方法   tar   框架   class   

原文地址:https://www.cnblogs.com/yongzhuang/p/12181080.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!