zoukankan      html  css  js  c++  java
  • Python使用openpyxl操作excel表格

    一、openpyxl的使用

    pip install openpyxl
    

    第一步:打开工作簿(读取Excel文件中所有的数据保存为工作簿对象)

    workbook = openpyxl.load_workbook('cases.xlsx')
    

    第二步:选中表单对象

    sheet = workbook['login']
    

    第三步:通过表单选中表格读取数据

    ①读取内容(第五行第四列)

    data = sheet.cell(row=5,column=4)
    printa(data.value) # 获取内容用value方法
    

    ②写入内容(保存才会生效)

    sheet.cell(row=7,column=3,value='("Python","123456")')
    # 写入内容后,一定要保存才会生效
    workbook.save('cases.xlsx')
    

    ③获取最大行和最大列

    # 最大行
    sheet.max_row
    # 最大列
    sheet.max_column
    

    ④按行获取所有的格子对象,每一行格子放入一个元组中

    sheet.rows
    

    *注意点:不要随便在表格中敲空格

    二、openpyxl的封装

    导包

    import openpyxl
    

    封装

    class ReadExcel(object):
        """操作Excl文件"""
    
        def __init__(self, fileName, sheetName):
            """
            初始化方法
            :param fileName: Excel文件名
            :param sheetName: 表单名
            """
            self.fileName = fileName
            self.sheetName = sheetName
    
        def open(self):
            """打开工作簿,选中表单"""
            self.wb = openpyxl.load_workbook(self.fileName)
            self.sh = self.wb[self.sheetName]
    
        def save(self):
            """保存工作簿对象的方法"""
            self.wb.save(self.fileName)
            self.wb.close()  # 这一行加不加关系不大,加了可以释放内存
    

    1、读取数据

    ①将每条数据存储成字典类型

        def read_data_dict(self):
            """读取数据(将每条数据存储成字典类型)"""
            # 打开工作簿
            self.open()
            # 通过rows获取Excel文件中所有的行数据,然后把数据转成列表
            rows = list(self.sh.rows)
            # 表头
            title = []
            # 遍历Excel文件中的第一行表头信息
            for i in rows[0]:
                title.append(i.value)
            # 用例数据列表
            cases = []
            # 遍历用例数据行
            for row in rows[1:]:
                # 定义一个列表存放每一行的数据
                data = []
                # 遍历每一行的数据
                for r in row:
                    data.append(r.value)
                # 把每一行的数据通过zip进行打包,然后转成字典,存入到用例数据列表中
                case = dict(zip(title, data))
                cases.append(case)
            return cases
    

    ②将每条数据存储成CaseData类对象类型

    class CaseData(object):
        """保存用例数据类"""
        pass
    
        def read_data_obj(self):
            """读取数据(将数据保存到CaseData类中)"""
            self.open()
            rows = list(self.sh.rows)
            # 表头
            title = []
            # 遍历Excel文件中的第一行表头信息
            for i in rows[0]:
                title.append(i.value)
            # 定义用例列表,用来存放用例类列表
            cases = []
            # 遍历用例数据行
            for row in rows[1:]:
                # 定义一个列表存放每一行的数据
                data = []
                # 遍历每一行的数据
                for r in row:
                    data.append(r.value)
                # 把每一行的数据通过zip进行打包,然后转成字典,存入到用例数据列表中
                case = dict(zip(title, data))
                # 定义一个用例存放类对象
                case_obj = CaseData()
                for k, v in case.items():
                    # 通过setattr()给对象添加属性
                    setattr(case_obj, k, v)
                # 把对象添加到列表中
                cases.append(case_obj)
            return cases
    

    2、写入数据

        def write_data(self, row, column, value):
            """
            写入数据
            :param row: 行
            :param column: 列
            :param value: 数据
            """
            self.open()
            # 指定行列进行写入数据
            self.sh.cell(row=row, column=column, value=value)
            # 保存
            self.wb.save(self.fileName)
            # 关闭
            self.wb.close()
    

    **需要用到操作excel的时候可以直接进行调用,减少重复的代码量。

  • 相关阅读:
    Windows10 iis10 arr webfarm
    两个command的疑惑
    关于controller和apicontroller的跨域实现过滤器的不同
    抽象工厂
    c# 字体库跨域解决
    c# 父类的引用指向子类的实例
    垂直居中
    扇形导航
    2D变换
    京东放大镜效果
  • 原文地址:https://www.cnblogs.com/desireyang/p/12059916.html
Copyright © 2011-2022 走看看