粗略描述:表格中每隔多行就会有一行头,比如表中A7、A20,在每行头下面跟着归属于这一标题的内容 ,比如F_name和J_name。
要实现:每个归属于同一标题的F_name和J_name倒序排列,格式为F_name:J_name。即蓝色部分是一组,黄色部分是一组。
这个表格下面还有很多行。
3. python代码实现 下面代码仅是实现功能,并未做异常处理。from openpyxl import load_workbook
file_name = "test.xlsx"
wb_read = load_workbook(filename=file_name)
ws_read = wb_read['reg_define'] #读取表格sheet名]
all_max_row = ws_read.max_row # 获取表格最大行号
A_name_Rows = [] # 定义一个列表,存放所有A列有值的行号
A_name_Conts = [] # 定义一个列表,存放所有A列有值的内容
# 从第7行开始取第一列所有非空的值,并添加到A_name_Rows和A_name_Conts列表中
for row in ws_read.iter_rows(min_row=7, max_row=all_max_row, min_col=1, max_col=1):
for cell in row:
content_row = cell.value
if type(content_row) == str:
A_name_Conts.append(content_row)
A_name_Rows.append(cell.row)
for i in range(len(A_name_Rows)): # 定义变量i,用来循环A_name_Rows列表
contents_row = [] # 定义一个列表,存放获取的所有内容
A_name_cont = A_name_Conts[i] # 第i行的A_name内容
min_row = A_name_Rows[i] # 在A列有值得列表中,取出下标i对应的行号,赋给变量min_row
i = i + 1
if i >= len(A_name_Rows): # 整张表的最大行超过列表长度时,将表最大行号赋给变量max_row
max_row = all_max_row
else:
max_row = A_name_Rows[i] - 1 # 在A列有值得列表中,取出下标i+1对应行号的上一行,赋给变量min_row
min_col = 6 # 定义获取范围的最小列
max_col = 10 # 定义获取范围的最大列
# 取第min_row行第min_col列开始,到max_row行max_col列的范围
for row in ws_read.iter_rows(min_row=min_row, max_row=max_row, min_col=min_col, max_col=max_col):
F_name_Cont = row[0].value # 取出F列的值
J_name_cont = row[4].value # 取出J列的值
content_row = F_name_Cont + ' : ' + str(J_name_cont)
contents_row.append(content_row)
contents_row = contents_row[::-1] # 列表倒序
print(A_name_cont, "是", contents_row)
执行结果:
A7 是 ['1a : a', '2b : b', '3c : c', '4d : d', '5e : e', '6f : f', '7g : g', '8h : h', '9i : i', '10j : j', '11k : k', '12l : l', '13m : m'] A20 是 ['1a : a', '2b : b', '3c : c', '4d : d', '5e : e', '6f : f', '7g : g', '8h : h', '9i : i', '10j : j', '11k : k'] Process finished with exit code 0
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)