python操作excel

一、openpyxl
1、安装
pip install openpyxl

2、excel操作步骤
2.1、找到目标excel
2.2、打开
2.3、读取数据、编辑excel单元格
2.4、保存
2.5、关闭
3、openpyxl 操作
3.1、创建wb对象(找到excel并打开它)
3.2、获取sheet对象
3.3、找到要操作的单元格
3.4、读数据、修改数据
3.5、保存,关闭

4、操作演示
from openpyxl import load_workbook
# 3.1、创建wb对象(找到excel并打开它)
wb = load_workbook(filename="testCase.xlsx")
# 3.2、获取sheet对象
sh = wb["login"]
# 3.3、找到要操作的单元格
cell = sh.cell(row=2, column=2)
# 3.4、读数据
result = cell.value
print(result)
# 关闭
wb.close()

5、load_workbook参数说明
filename:excel文件名称(带路径)
read_only=False:可读可写,默认False,只读

keep_vba=KEEP_VBA:保留vba代码
data_only=False:默认是False,有计算公式的单元格直接读出来的是公式
True:有公式的单元格读出来是计算后的结果
keep_links=True:保留外部链接

6、获取sheet对象
6.1、sh = wb["login"] 常用
6.2、res = wb.sheetnames 返回一个sheet名称的list
6.3、for name in wb 遍历sheet对象
6.4、res = wb.worksheets[1]

7、找到要操作的单元格
7.1、res = sh["B2"]
7.2、cell = sh.cell(row=2, column=2)

8、行操作
1、 res = sh.rows 获取值就要通过for 循环去拿(双重)
2、获取最大行
res = sh.max_row

3、行切片
for val in sh.iter_rows(min_row=1,max_row=5,min_col=1,max_col=5,values_only=True):
print(val)
# min_row=None: 起始行的索引(不写默认为1),max_row:结束行索引不写的话默认是最大值,索引从1开始
# min_col=起始列的索引(不写默认为1), max_col:结束列的索引(不写的话默认是最大值),索引从1开始,
# values_only=False 返回单元格的对象
# values_only=True 返回单元格的值

9、列操作
1、获取列对象(所有),如果要获取值还是要用value方法(for循环去取值)
res = sh.columns

2、获取最大的列[参数的作用同行切片]
res2 = sh.max_column # 获取最大列
"""
# 列操作
from openpyxl import load_workbook
wb = load_workbook(filename="testCase.xlsx")
sh = wb["login"]
#res = sh.columns
#print(list(res))
# res2 = sh.max_column # 获取最大列
# print(res2)

for val in sh.iter_cols(min_row=1,max_row=3,min_col=1,max_col=3,values_only=True):
print(val)


# 行切片
# from openpyxl import load_workbook
# wb = load_workbook(filename="testCase.xlsx")
# sh = wb["login"]
# for val in sh.iter_rows(min_row=1,max_row=5,min_col=1,max_col=5,values_only=True):
# print(val)

 


# min_row=None: 起始行的索引(不写默认为1),max_row:结束行索引不写的话默认是最大值,索引从1开始
# min_col=起始列的索引(不写默认为1), max_col:结束列的索引(不写的话默认是最大值),索引从1开始,
# values_only=False 返回单元格的对象
# values_only=True 返回单元格的值
# [1,2,3,4,5]

 

 


# res = sh["B2"]
# 获取最大行
# res = sh.max_row
# print(res)


# res = sh.rows # 获取所有行对象
# for i in list(res):
# print(i) # 对象
# #print(i.value)
# for ii in i:
# print(ii.value) #值
# wb.close()

 

 


# from openpyxl import load_workbook
# wb = load_workbook(filename="testCase.xlsx")
# #sh = wb["login"]
# res = wb.worksheets[1]
# print(res)
# wb.close()

 

 

# 3.1、创建wb对象(找到excel并打开它)
# wb = load_workbook(filename="testCase.xlsx")
# print("wb对象:",wb)
#
# # 3.2、获取sheet对象
# sh = wb["login"]
# print("sh对象:",sh)
#
# res = wb.sheetnames
# print('sheet对象:',res)
#
# list_test = ['register', 'login', 'recharge', 'invest', 'audit', 'add_loan', 'member_info', 'all']
# for i in list_test:
# print(i)
#
# for name in wb:
# print('一个个拿sheet:',name)

 

二、写表操作
1、sh["A1"]="test1" #给A1单元格赋值
2、sh.cell(row=1,column=2).value="test2" #给A1单元格赋值
sh.cell(row=1,column=2,value="test03") #给A1单元格赋值
"""
from openpyxl import load_workbook
wb = load_workbook(filename="testCase.xlsx")
sh = wb["login"]
# sh["A1"]="test1" #给A1单元格赋值
# sh.cell(row=1,column=2).value="test2" #给A1单元格赋值
# sh.cell(row=1,column=2,value="test03")

# 在表格最下面去写,按行写入,每一个元素站一个单元格
test_list = [1,2,3,4,5]
sh.append(test_list)
wb.save("testCase.xlsx")

 


# 3.3、找到要操作的单元格对象
# cell = sh.cell(row=2, column=2)
# print("cell对象:",cell)
#
# # 3.4、读数据
# result = cell.value
# print(result)
#
# # 关闭
# wb.close()

# 获取测试用例数据
from openpyxl import load_workbook
def get_test_case():
wb = load_workbook(filename="testCase.xlsx") # 实例化excel
sh = wb["login"] # 获取sheet
all_excel_data = list(sh.iter_rows(values_only=True)) # 获取表格所有数据
excel_title = all_excel_data[0] # 获取表头
case_data_list = all_excel_data[1:] # 获取所有的用例数据
test_case_list = [] # 新建空列表,收集所有的测试用例数据
for case in case_data_list:
#print('表头',excel_title)
#print('测试用例',case)
test_case = dict(zip(excel_title,case)) # 数据拼接,用表头与测试用例数据进行组装拼接成dict
test_case_list.append(test_case) # 将每次拼接好的测试用例添加到test_case_list
#print("拼接后的数据:",test_case)
#print(len(test_case_list))
wb.close()
return test_case_list
res = get_test_case()
print(res)

 

posted @ 2022-01-07 17:13  晨起的太阳  阅读(2762)  评论(0编辑  收藏  举报