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)

 

posted @ 2020-05-07 23:20  hn_大熊  阅读(358)  评论(0编辑  收藏  举报