一个excel表格文件包含一个工作簿(workbook),一个工作簿可以包含多个工作表(worksheets)。用户正在查看的工作表定义为激活的工作表(active sheet)。每个工作表都有行和列。行以数字1开始,列以字母A开始。
一个工作表由单元格(cell)组成,cell只存储两种数据类型,数字和字符串(除了纯数字,其它均为字符串类型)。对应cell中不需要输入任何值,空读取出来就是None。
对于openpyxl来说,一个excel文件是一个workbook对象,一个sheet是一个worksheet对象,一个单元格是一个cell对象。
本章所有例子均出自如图所示的excel表格文件
工作表autotest中的数据如下:
工作表Sheet1中的数据如下:
20.1 WorkBook属性
例1
import os
from pprint import pprint
from openpyxl import load_workbook
file_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), "自动化测试平台需求.xlsx")
wb = load_workbook(file_path) #需要传入要加载数据的文件的绝对路径
if __name__ == '__main__':
sh = wb.sheetnames
print(sh)
输出结果:
['autotest', 'Sheet1']
20.2 WorkSheet属性
获取当前表单(sheet)中总行数和总列数
例2
import os
from pprint import pprint
from openpyxl import load_workbook
file_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), "自动化测试平台需求.xlsx")
wb = load_workbook(file_path)
if __name__ == '__main__':
sh = wb["autotest"]
print(sh.max_row) #工作表autotest的总行数
print(sh.max_column) #工作表autotest的总列数
输出结果:
18
5
20.3 cell属性
在表单中,获取单元格的数据。
例3
import os
from pprint import pprint
from openpyxl import load_workbook
file_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), "自动化测试平台需求.xlsx")
wb = load_workbook(file_path)
sh = wb["autotest"]
if __name__ == '__main__':
cel = sh.cell(2, 2) #输出第2行第2列单元格的数据(行号和列号都以数字1开始)
print(cel.value)
输出结果:
1、压力测试
3、上下电功能测试
4、通信接口测试
5、诊断测试
6、网络管理测试
7、通信诊断测试
例4
修改文件中某个单元格中的数据。
import os
from pprint import pprint
from openpyxl import load_workbook
file_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), "自动化测试平台需求.xlsx")
wb = load_workbook(file_path)
sh = wb["autotest"]
if __name__ == '__main__':
cel = sh.cell(2, 1)
cel.value = 9
wb.save("自动化测试平台需求.xlsx") #保存数据
wb.close() #关闭文件,释放资源
结果:第2行第1列单元格中的数据修改为9
例5
按行读取数据
import os
from pprint import pprint
from openpyxl import load_workbook
file_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), "自动化测试平台需求.xlsx")
wb = load_workbook(file_path)
sh = wb["Sheet1"]
if __name__ == '__main__':
titles = []
pprint(list(sh.rows)) #使用list()转换成列表后,返回一个列表.列表成员是每一行的数据(元祖形式)
print("---------")
#遍历第一行的所有单元格
for item in list(sh.rows)[0]:
titles.append(item.value)
pprint(titles)
wb.close() # 关闭文件,释放资源
输出结果:
[(<Cell 'Sheet1'.A1>, <Cell 'Sheet1'.B1>),
(<Cell 'Sheet1'.A2>, <Cell 'Sheet1'.B2>)]
---------
[2, 3]
例6
按列读取数据
import os
from pprint import pprint
from openpyxl import load_workbook
file_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), "自动化测试平台需求.xlsx")
wb = load_workbook(file_path)
sh = wb["Sheet1"]
if __name__ == '__main__':
titles = []
pprint(list(sh.columns)) #使用list()转换成列表后,返回一个列表.列表成员是每一列的数据(元祖形式)
print("---------")
#遍历第一列的所有单元格
for item in list(sh.columns)[0]:
titles.append(item.value)
pprint(titles)
wb.close() # 关闭文件,释放资源
输出结果:
[(<Cell 'Sheet1'.A1>, <Cell 'Sheet1'.A2>),
(<Cell 'Sheet1'.B1>, <Cell 'Sheet1'.B2>)]
---------
[2, 5]