import openpyxl
#读取excel的
path=r'服务端测试用例.xlsx'
excel=openpyxl.load_workbook(path)#data_only=True只有有数据才读吧
sheet=excel['Sheet1']
hang=sheet.max_row
col=sheet.max_column
# 需求每行数据的最后三个单元格依次做 '用例名称', '操作步骤', '预期结果',前面的单元格都拼接起来作为模块
# # 思路 以后写代码都先把思路理清楚再写
# 1 第一层循环把excel表中每行数据作为一个元素保存到列表1里面: return 列表1
# 2 获得每行的最大列的值(totol_length): 写一个方法
# 3 第二层循环: 把读取每一行的每一个单元格, 添加到临时列表2中, 创建一个空列表3
# 4第三层循环1: 遍历列表2, 遍历次数为列表2的长度 - 3(model_lenth), 然后获得第1个元素到倒数第四个单元格的值,
# 以固定格式依次添加到字符串1中,并且添加前要strip剔除空格和回车 最后把这个字符串1添加到列表3中
# 5第三层循环2: 遍历列表2, 遍历3次, 取该行倒数第3列到最后一列的数据(model_lenth, totol_length);
# 也可以不用循环, 写死把倒数3个单元格的值依次添加到列表3中
# 6这样把数据全都读到了, 然后用两层循环写到excel中就可以了
#获得某一行最大列,参数:x为row的值,y为sheet的最大column;此方法里需要用到sheet对象
def row_max(x,y):
max_col=0
for a in range(1,y+1):
value = sheet.cell(row=x, column=a).value
if value==None:
break
max_col += 1
return max_col
####################################读数据
lin=[]#excel所有数据用列表lin保存,每个元素就是一行数据
for x in range(1,hang+1):#总共循环这么多次:x代表行数
rowm=row_max(x,col)#获得每行的最大列的数
#存放一行数据,4个元素,第一个元素是原来excel一行数据的除后3个单元格按添加起来的,后面三个元素源excel一行最后三个单元格直接添加进来的
lin2=[]
for a in range(rowm+1):#循环把每个单元格添加到列表2中
lin3 = ''#用来拼接模块的字符串
aaa=0#临时数 判断是不是倒数前3
if aaa<rowm-3:#判断非倒数前3,如果不是就继续添加到模块路径中
for index in range(1, rowm-2): # 第三次循环,获得除倒数3个的每个单元格的值
value = sheet.cell(row=x, column=index).value
lin3 += (value.strip()+'/')#把每个单元格剔除空格和回车后拼接到lin3这个字符中
aaa += 1
lin2.append(lin3.strip())
break
#添加倒数3个的字段 写死 传到lin2列表中
value1 = sheet.cell(row=x, column=rowm - 2).value
value2 = sheet.cell(row=x, column=rowm - 1).value
value3 = sheet.cell(row=x, column=rowm).value
lin2.append(value1)
lin2.append(value2)
lin2.append(value3)
# print(lin2)#打印每行数据
lin.append(lin2)#添加每行数据到列表,每行数据是一个列表
####################################写数据
# #写excel 方法1 不通过
# a=1
# for lin2 in lin:#lin2代表行值
# b = 1
# for y in lin2:#y代表要写入的每个单元格值
# sheet.cell(row=a, column=b).value =y
# b+=1
# a+=1
#方法2
# print(len(lin[4]))#lin的长度是5
path2=r'D:\111.xlsx'
excel2=openpyxl.load_workbook(path2)
sheet2=excel2['Sheet1']
for x in range(1,len(lin)+1):
for y in range(1,5):
sheet2.cell(row=x, column=y).value =lin[x-1][y-1]
print(lin[x-1][y-1])
#注意注意!!!!写的对象不能和读的对象是同一个sheet甚至不能同一个load_workbook,因为会把原来的数据全带过来
excel2.save(r'111.xlsx')