Python之openpyxl处理excel数据
1.前⾔
在测试⼯作中,我们不可避免的就是跟测试数据打交道,那么说到数据,我们⼜不可避免的要跟excel打交道。在⼯作中,⽤excel存储测试数据以及测试结果是⾮常⾮常常见的。其实,python中有好多专门针对Excel进⾏数据处理的库,⽐如:xlrd、xlwt、xlutils、openpyxl以及⼤数据中常⽤的pandas等等,他们的侧重点各有不同。我们简单的列举⼀下:
库名作⽤
xlrd从excel中读取数据,⽀持xls,xlsx
xlwt从excel进⾏修改操作,不⽀持对xlsx格式的修改
xlutils在xlrd和xlwt中,对⼀个已存在的⽂件进⾏修改
openpyxl主要针对xlsx格式的excel进⾏读取和编辑
pandas可对csv进⾏操作,主要⽤于⼤数据分析
对于上⾯这些,我们只需要了解,以后⼤家可以根据不同的需要去调⽤不同的库,这⾥不多做解释。今天,我们要学习的是⽤openpyxl对Excel中的数据进⾏处理。
2.Excel处理的基本元素
路径: python中Excel的路径是指他所在的位置,⽐如:D:\pycharmProject\python_self_study
⽂件,⼯作簿:⼯作簿指的就是⼀个以.xlsx或者.xls结尾的⽂件。对应openpyxl中的WorkBook。
表格:Excel中的表格指的是Excel⽂件中的⼀个sheet,对应openpyxl中的WorkSheet。
单元格:单元格就是⼀个sheet中很多⼩格⼦中的⼀个,对应openpyxl中的cell。
⾏和列:⾏和列是⼀个sheet中⼜内容的⾏数和列数。注意:sheet中的⾏和列都是以1开始的。
3.对Excel进⾏操作
3.1 安装openpyxl模块并导⼊
第⼀步很简单,我们要使⽤模块,必须先安装此模块,所以我们在cmd命令⾏下输⼊命令:pip install openpyxl来安装模块,或者也可以在pythoncharm中的settings下的ProjectInterpreter中下载。下载完成后导⼊
from openpyxl import load_workbook
3.2 workbook
3.2.1 当excel存在时,加载excel中的workbok
# 加载workbook
wb = load_workbook("original_data.xlsx")
print(wb)
3.2.2 创建workbook
# 创建workbook,并且保存
wb = Workbook()
wb.save("test.xlsx")
3.3 获取worksheet
3.3.1 通过索引获取sheet
# 通过索引获取sheet
sheets = wb.worksheets
print(sheets)
sheet1 = sheets[0]
print(sheet1)
sheet2 = sheets[1]
python怎么读取excel文件数据print(sheet2)
我们通过workbook的worksheets属性获取他的所有sheet对象,然后根据索引获取⾃⼰想要的那个sheet,查看打印如下,第0个sheet为divide,第⼀个sheet为minus
"D:\Program Files\" D:/pycharmProject/python_self_study/classes/demo_11_excel.py
<openpyxl.workbook.workbook.Workbook object at 0x0420D790>
[<Worksheet "divide">, <Worksheet "minus">]
<Worksheet "divide">
<Worksheet "minus">
Process finished with exit code 0
3.3.2 通过名字获取sheet
# 通过名字获取sheet
wb = load_workbook("original_data.xlsx")
sheet1 = wb["divide"]
print(sheet1)
sheet2 = wb["minus"]
print(sheet2)
我们拿到workbook对象以后,直接通过在后⾯加[sheetname]的⽅式获取所要的sheet。打印结果如下
"D:\Program Files\" D:/pycharmProject/python_self_study/classes/demo_11_excel.py
<Worksheet "divide">
<Worksheet "minus">
Process finished with exit code 0
3.3.3 通过active获取当前选中的sheet
# 通过active获取当前选中的sheet
wb = load_workbook("original_data.xlsx")
sheet = wb.active
print(sheet)
workbook的active属性拿到的是当前被选择的sheet。查看打印如下
"D:\Program Files\" D:/pycharmProject/python_self_study/classes/demo_11_excel.py
<Worksheet "divide">
Process finished with exit code 0
3.3.4 创建sheet
我们拿到了workbook对象wb后,调⽤create_sheet()⽅法,就能在相对应的excel中创建⼀个sheet,执⾏完上⾯的语句后,我们打开excel,可以看见mysheet,如下图:
3.4 ⾏和列
sheet中的⾏和列很好理解,这⾥我们要掌握的是,最⼤⾏和最⼤列,表⽰的是⼀个sheet中有数据的⾏数和列数。
所以我们调⽤sheet的max_row属性和max_column属性就可以拿到相对的值,代码如下:
3.5 单元格cell
4.Excel操作进阶
学习了上⾯openpyxl中对excel的基础知识,其实我们对于数据的读取、写⼊都可以进⾏了,接下来,我们就对Excel操作进⾏简单的封装,代码如下:
class ExcelManual:
def __init__(self, file_path):
self.file_path = file_path
self.wb = load_workbook(file_path)
self.live_sheet = None
def select_sheet(self, name):
"""
选择表单
:param name: 表单名称
:return:
"""
self.live_sheet = self.wb[name]
return self.live_sheet
def read_cell_value(self, row, column):
"""
读取⼀个单元格的数据内容
:param row: ⾏
:param column: 列
:return:
"""
if isinstance(self.live_sheet, Worksheet):
return self.ll(row, column).value
def write_value_in_cell(self, row, column, value):
"""
往单元格中写⼊数据
:param row:⾏
:param column:列
:param value:值
:return:
"""
self.ll(row, column, value)
def read_row_value(self, row_num):
"""
读取⼀⾏的数据功能
:
return:
"""
if isinstance(self.live_sheet, Worksheet):
max_row = self.live_sheet.max_row
if row_num > max_row:
print("⾏数超过表单中的最⼤⾏数")
return
max_column = self.live_sheet.max_column
data_list = []
for i in range(max_column):
data_list.append(self.ll(row_num, i + 1).value)            return data_list
def read_value_by_sheet(self, sheet_name):
"""
获取表单中的所有数据
:param sheet_name:
:return:
"""
current_sheet = self.wb[sheet_name]
if isinstance(current_sheet, Worksheet):
return list(current_sheet.values)
def close(self):
"""操作完⼀定要保存关闭才有效"""
self.wb.save(self.file_path)
self.wb.close()

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。