python3操作excel

python3使用openpyxl完成excel数据读和写

工具

python3操作excel数据,对于excel 2007及以上版本,一般使用openpyxl来进行操作;windows下,只需要控制台执行

1
pip install openpyxl

即可,若是使用pipenv进行类库管理的,控制台下进入工程所在目录(Pipfile所在路径),执行

1
pipenv install openpyxl

即可。对于pipenv在之前的一篇博客中有提及:

python项目依赖管理工具

安装完成之后,执行命令python进入python交互环境,引包:

1
import openpyxl

不报错则安装成功

常用操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# 引包
import openpyxl

# excel文件路径
file = "G:\workstation\py_workstation\DataDriverTest\DdtData\testData.xlsx"
# 打开excel
wb = openpyxl.load_workbook(file)
# 获取指定sheet页,名称:“search_data”
sheet = wb["search_data"]
# 获取所有sheet的名称
sheets = wb.sheetnames

# 获取行数
nrow = sheet.max_row
# 获取列数
ncol = sheet.max_column
# 获取单元格值
cell_1 = sheet.cell(row=2, column=2).value
# 单元格赋值
cell_2 = sheet.cell(row=2, column=2, value="YIDA")

# 保存excel
wb.save(file)

读写excel

进行ddt时,有的时候测试数据,甚至测试用例是在excel中,如下表,标示出了测试数据,预期结果。

number  testdata    expectdata
1     Jordan     DRFSA
2     Garnett     Kevin
3     Oneal     Shaquille
4     Nowitzki    rsdffd
5     Duncan    Tim

首先是尝试使用python3 把数据写入excel

写数据

直接上代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
@author: kyle
@time: 2018/2/9 13:25
"""
import openpyxl

file = "G:/workstation/py_workstation/DataDriverTest/DdtData/test.xlsx"
wb = openpyxl.load_workbook(file)
sheet = wb.active
sheet.title = "search_data"

value = [
["number", "testdata", "expectdata"],
["1", "Jordan", "DRFSA"],
["2", "Garnett", "Kevin"]
]
for i in range(0, 3):
for j in range(0, len(value[i])):
sheet.cell(row=i+1, column=j+1, value=str(value[i][j]))
wb.save(file)

读数据

代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
@author: kyle
@time: 2018/2/9 14:15
"""
import openpyxl

# 打开excel
wb = openpyxl.load_workbook("G:/workstation/py_workstation/DataDriverTest/DdtData/testData.xlsx")
# 获取指定sheet页
sheet = wb["search_data"]

# 获取列表中最大行数和最大列数
nrows = sheet.max_row
ncol = sheet.max_column

testdata = []

# 获取2到6行
for i in list(range(2,nrows+1)):
tmplist = []
tmplist.append(sheet.cell(row=i, column=2).value) #2,2
tmplist.append(sheet.cell(row=i, column=3).value) #2,3
testdata.append(tmplist)
print(testdata)

完成!!!

后记

估计是快过年,快放假了,都没什么心思敲了;真的是弄了好久才读出数据。。。python3操作excel是真的跟python2很不一样,网上的教程很多都不能用,最明显的就是:
python2可以遍历工作表区域每一行,跳过第一行,直接写成

1
for row in sheet.rows[1:]:

但是python3实现不了。。
不过自己能折腾出来,感觉还是有点小小的成就感的~

附环境版本:

1
2
3
4
python  3.6
openpyxl 2.5.0
win 10
office 2013
文章目录
  1. 工具
  2. 常用操作
  3. 读写excel
    1. 写数据
    2. 读数据
  4. 后记
|