表格数据读取为字典/写入指定位置数据
##测试数据 表格数据转化为字典提供测试脚本使用,
import sys,os
from openpyxl import load_workbook
add_path = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
sys.path.append(add_path)
path = os.path.dirname(__file__)
print(path)
data_path = path + '/baidu_data.xlsx'
sheet_name = 'login'
#打开表格
wb = load_workbook(data_path)
#读取表格的sheet_name
sheet_obj = wb[sheet_name]
#获取表格每行的数据
list_h = list(sheet_obj.rows)
#获取表格第一行的数据,也就是表头的数据
list_h1 = list_h[0]
#因为表格内字典已caseName再次封装区分行数据,先获取caseName所在列
w = 0
for i in range(len(list_h1)):
if list_h1[i].value == 'caseName':
w = i
print(w)
# 封装表格字典
xlsl_dict = {}
for j in list(sheet_obj.rows)[1:]: # 遍历表格每行数据,但是不遍历第一行表头数据
case_name = j[w].value # 现获取第j行表格数据 的casename值,再次封装字典使用
case_dict = {} # 以casename值 为区分再次封装字典塞入整个表格字典
for k in range(len(list_h1)): # 遍历每列字段
data_value = j[k].value
if type(data_value) == str:#表格内数据可为字典,读取为字典,自点击换行处理
if '{' in j[k].value or '}' in j[k].value:
data_value = j[k].value.replace('\n','')
data_value = json.loads(data_value)
case_dict[list_h1[k].value] = data_value # case_dict内 key取值表头的列的值,value取值j行k列的值
xlsl_dict[case_name] = case_dict # 将遍历好的case_dict字典塞入整体xlsl_dict
print('当前表格字典为',xlsl_dict)
wb.close()#关闭表格
根据需求写入指定位置数据,单个数据写入
import sys,os
from openpyxl import load_workbook
add_path = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
sys.path.append(add_path)
path = os.path.dirname(__file__)
print(path)
data_path = path + '/baidu_data.xlsx'
sheet_name = 'login'
#打开表格
wb = load_workbook(data_path)
#读取表格的sheet_name
sheet_obj = wb[sheet_name]
#获取表格每行的数据
list_h = list(sheet_obj.rows)
#获取表格第一行的数据,也就是表头的数据
list_h1 = list_h[0]
w_text = 'stute'#测试结果状态表头
h_text = 'test_signin_password_error'#测试标题字段
#获取caseame列宽
case_name_w = 0
for i in range(len(list_h1)):
if list_h1[i].value == 'caseName':
case_name_w = i
print(case_name_w)
#根据列宽,已知测试标题,求出stute状态写入宽度
w = 0#列宽
for i in range(len(list_h1)):
if list_h1[i].value == w_text:
w = i+1#i为列表下标,实际需要+1
break
#根据case_name求出行高
xxx = list(sheet_obj.rows)
h = 0#行高
for j in range(len(xxx)):
print(xxx[j][case_name_w].value)
if xxx[j][case_name_w].value==h_text:
h = j+1#j为列表下标,实际需要+1
print('行高为%d' %h)
print('宽为%d' %w)
sheet_obj.cell(row = h,column = w,value = 'TEST')#写入数据
wb.save('baidu_data.xlsx')#保存,写入不保存则不生效
ce = sheet_obj.cell(row = h,column = w)#读取写入表格位置数据
print(ce.value)
字典写入表格
def input_xlsx_dict(data_path,sheet_name,input_data):
'''
:param data_path: 表格路径
:param sheet_name: sheet页名称
:param input_data: 写入数据,这里的写入数据是字典
:return:
'''
# 打开表格
wb = load_workbook(data_path)
# 读取表格的sheet_name
sheet_obj = wb[sheet_name]
for key in input_data.keys():
# 获取表格每行的数据
stute_text = 'testResult'
w,h = return_table_coordinates(sheet_obj,stute_text,key)
print(w, h)
stute = input_data[key]['testResult']
sheet_obj.cell(row=h, column=w, value=stute) # 写入数据
data_test = 'testTime'
w2, h2 = return_table_coordinates(sheet_obj, data_test,key)
test_data = input_data[key]['testTime']
print(w2,h2)
sheet_obj.cell(row=h2, column=w2, value=test_data) # 写入数据
wb.save(data_path) # 保存,写入不保存则不生效
# ce = sheet_obj.cell(row=h, column=w) # 读取写入表格位置数据
# print(ce.value)
def return_table_coordinates(sheet_obj,x_coordinate,y_coordinate):
# 根据列宽,已知测试标题,求出stute状态写入宽度
'''
:param sheet_obj: xlsx sheet页读取数据
:param x_coordinate: x轴名称
:param y_coordinate: y轴名称
:return:
'''
number_lines = list(sheet_obj.rows)
# 获取表格第一行的数据,也就是表头的数据
number_lines_1 = number_lines[0]
# 获取caseame列宽
case_name_w = 0
for i in range(len(number_lines_1)):
if number_lines_1[i].value == 'caseName':
case_name_w = i
print(case_name_w)
break
x = 0 # 列宽
for i in range(len(number_lines_1)):
if number_lines_1[i].value == x_coordinate:
x = i + 1 # i为列表下标,实际需要+1
break
# 根据case_name求出行高
y = 0 # 行高
for j in range(len(number_lines)):
if number_lines[j][case_name_w].value == y_coordinate:
y = j + 1 # j为列表下标,实际需要+1
print('当前坐标%s%s' %(str(x),str(y)))
return x,y
表格数据修改及删除操作
import openpyxl
old_data = {
1:{'id':'RT891ES-E21530-3',
'price': '995.84'
},
2:{'id':'RT891ES-E13869',
'price':'51111.31'
},
3:{'id':'9',
'price':'542.31'
}
}
xlsx_path = r'E:\ROBOT\pending.xlsx'
wp = load_workbook(xlsx_path)#读取表格
ws = wp.get_sheet_names()[0]#获取表格所有sheet
wb = wp.get_sheet_by_name('0')#获取表格sheet名称为0的页
list_w = list(wb.rows)#获取行数
#获取表格第一行的数据,也就是表头的数据
list_h1 = list_w[0]#获取第一行的数据
for i in range(len(list_h1)):#遍历第一行的数据,取出指定字段坐标
print(list_h1[i].value)
if 'Seller SKU' == list_h1[i].value:
hhh = i
elif 'Campaign Price' == list_h1[i].value:
price_h = i
#
#遍历列数据,指定列数据校验
list_sh = list(wb.columns)
#获取表格第一行的数据,也就是表头的数据
list_h2 = list_sh[hhh]
dedal = 0#处理数据列坐标,删除操作会让后续数据前移
for i in range(2,len(list_h2)):
h_value = list_h2[i].value
print('当前单单元格值为%s' %h_value)
d_h = i - dedal + 1
for key in old_data.values():
if key['id'] == str(h_value):
print('改价格')
g_h = d_h
g_w = price_h + 1
wb.cell(row=g_h, column=g_w,value=key['price'])
break
else:
wb.delete_rows(d_h)
dedal += 1
print('删除')
wp.save(xlsx_path)
浙公网安备 33010602011771号