zoukankan      html  css  js  c++  java
  • python之excel表格操作

    1.openpyxl介绍和安装

    1.1为什么要学习excel

    • 存测试数据

    • 存测试结果

    1.2安装openpyxl

    • python中与excel操作相关的模块

      1.xlrd库:从excel中读取数据,支持xls,xlsx

       2.xlwt库:对excel进行修改操作,不支持对xlsx格式的修改

               3.xlutils库:在xlwt和xlrd中,对一个已存在文件进行修改

               4.openpyxl:主要针对xlsx格式的excel进行读取和编辑

    • 安装方式

      pip install openpyxl

    1.3Excel中的三大对象

    • ​ WorkBook:工作簿对象

    • Sheet:表单对象

    • Cell:表格对象

    2.openyxl对excel的操作

    1.新建文件Excel文件 Workbook方法

    步骤:

    ​ 1.新建工作薄 openpyxl.Workbook()

    ​ 2.保存为xlsx文件


    #创建一个工作薄
    workbook=openpyxl.Workbook()
    #创建一个表单
    workbook.create_sheet("sheet3")
    #将工作薄保存为文件
    workbook.save('test.xlsx')

    注意点:如果保存的文件名存在,将会覆盖原文件

    打开已存在的文件

    ​ load_workbook()

    2.读写数据的方法

    操作流程

    • ​ 打开一个excel文件,或者创建一个excel文件

    • 获取某个表单对象

    • 在表单对象中的单元格(cell)中读、写、修改数据

    相关操作

    • 打开文件,生成工作薄

      ​ wb=openpyxl.load_workbook('test.xlsx')

    • 获取操作的表单

      sh=wb['Sheet']

    • 读取指定表格内的数据


      #读取单元格的数据
      #参数:row:行,column:列
      ce=sh.cell(row=1,column=2)
      print(ce.value)

      #按行读取数据
      columns_data=sh.rows

      #按列读取数据
      columns_data=sh.columns
      print(list(columns_data))
    • 写入数据


    #保存数据
    #参数:row:行,column:列 value 写入值
    sheet.cell(row=1,column=8,value=199)
    workbook.save("test.xlsx")
    • 获取总行数

      max_row=sh.max_row

    • 获取总列数

      max_row=sh.max_column

    • ​ 获取所有的表单

    ​           wb.sheetnames

     

    3.常用功能封装成方法

    class ReadExcel(object):
    """
    读取excel数据
    """

    def __init__(self, file_name, sheet_name):
    """
    这个是用例初始化读取对象的
    :param file_name: 文件名字 --> str
    :param sheet_name: 表单名字 --> str
    """
    self.file_name = file_name
    # 打开工作簿
    self.wb = openpyxl.load_workbook(file_name)
    # 选择表单
    self.sheet = self.wb[sheet_name]

    # def __del__(self):
    # # 关闭工作簿
    # self.wb.close()

    def read_data_obj(self):
    """
    按行读取excel中的数据,以列表的形式返回,列表中每个对象为一条用例
    excel中的表头为对象的属性,对应的数据为属性值
    :return: type:list--->[case_obj1,case_obj2....],
    """
    # 按行获取数据转换成列表
    rows_data = list(self.sheet.rows)
    # 获取表单的表头信息
    titles = []
    for title in rows_data[0]:
    titles.append(title.value)
    # 定义一个空列表用来存储所有的用例
    cases = []
    # 判断是否是读取所有数据
    for case in rows_data[1:]:
    # data用例临时存放用例数据
    data = []
    # 判断该单元格是否为字符串类型,
    for cell in case:
    data.append(cell.value)
    # 将该条数据放入cases中
    case_data = zip(titles, data)
    # 创建一个Case类的对象,用来保存用例数据,
    case_obj = Case(case_data)
    cases.append(case_obj)
    return cases

    def readline_data_obj(self, list1=None):
    """
    按指定的列,读取excel中的数据,以列表的形式返回,列表中每个对象为一条用例
    excel中的表头为对象的属性,对应的数据为属性值
    :param list1: list -->要读取的列[1,2....]
    :return: type:list--->[case_obj1,case_obj2....],
    """
    list1 = eval(list1)
    if len(list1) == 0:
    return self.read_data_obj()

    max_r = self.sheet.max_row
    # 定义一个空列表,用来存放所有用例
    cases = []
    # 定义一个空列表,用来存放表头
    titles = []
    # 遍历出所有的行
    for row in range(1, max_r + 1):
    # 判断是否是第一行
    if row == 1:
    # 遍历list1指定的列,获取表头
    for column in list1:
    title = self.sheet.cell(row, column).value
    # 将数据添加到表头中
    titles.append(title)
    else:
    # 定义一个空列表,用来存放该行的数据
    case_data = []
    for column in list1:
    info = self.sheet.cell(row, column).value
    case_data.append(info)
    # 将该条数据和表头进行打包组合,
    case = list(zip(titles, case_data))
    # 创建一个用例对象,将表头和数据传进入初始化
    case_obj = Case(case)
    cases.append(case_obj)
    return cases

    def write_data(self, row, column, msg):
    # 写入数据
    self.sheet.cell(row=row, column=column, value=msg)
    self.wb.save(self.file_name)
    出处:https://www.cnblogs.com/hn-daxiong/
    欢迎转载,但未经作者同意请保留此段声明,并在文章页面明显位置给出原文链接。
  • 相关阅读:
    宿主机( win 7 系统) ping 虚拟机VMware( cent os 6.6 ) 出现“请求超时”或者“无法访问目标主机”的解决方法
    Java实现 LeetCode 23 合并K个排序链表
    Java实现 LeetCode 23 合并K个排序链表
    Java实现 LeetCode 23 合并K个排序链表
    Java实现 LeetCode 22 括号生成
    Java实现 LeetCode 22 括号生成
    Java实现 LeetCode 22 括号生成
    Java实现 LeetCode 21 合并两个有序链表
    Java实现 LeetCode 21 合并两个有序链表
    Java实现 LeetCode 21 合并两个有序链表
  • 原文地址:https://www.cnblogs.com/hn-daxiong/p/12846560.html
Copyright © 2011-2022 走看看