Excel行内每4个元素拆分为新行 openpyxl循环无输出问题修复
现有代码问题定位
你的代码跑不出结果是几个低级循环逻辑错误堆出来的:
c += 1缩进错误,放在了内层列遍历的while循环外面,列号永远停在初始值2,内层循环直接死循环- 计数变量x凑够4个之后既没有重置,也没有清空临时存值的rList,就算循环能跑,也会把所有值堆在同一个列表里,分不出组
r += 1缩进错误,放在了外层行遍历的while循环外面,行号永远停在初始值2,外层循环也死循环- 全程没有写输出或者写入文件的逻辑,就算逻辑跑通了也看不到任何结果
修正后可直接运行的代码
import openpyxl # 加载目标Excel文件 excelFile = openpyxl.load_workbook("nameoffile.xlsx") sheet = excelFile["Sheet1"] nRows = sheet.max_row nCols = sheet.max_column group_size = 4 # 每组固定4个数值 parsed_result = [] # 遍历数据行,原逻辑从第2行开始是跳过表头,可根据实际表结构调整起始行号 for r in range(2, nRows + 1): # 先读取当前行所有有效数值,原逻辑从第2列开始读,跳过第一列内容 row_values = [] for c in range(2, nCols + 1): cell_val = sheet.cell(row=r, column=c).value if cell_val is not None: row_values.append(cell_val) # 按每4个一组切片拆分,自动堆叠成新行 for i in range(0, len(row_values), group_size): parsed_result.append(row_values[i:i+group_size]) # 新建工作表存储拆分结果 new_sheet = excelFile.create_sheet(title="拆分结果") for row_idx, row_data in enumerate(parsed_result, start=1): for col_idx, val in enumerate(row_data, start=1): new_sheet.cell(row=row_idx, column=col_idx, value=val) # 保存处理后的文件 excelFile.save("拆分后结果.xlsx") # 控制台打印预览,效果和你给出的输出示例一致 print("拆分完成,输出预览:") for group in parsed_result: print(" ".join(map(str, group)))
实现说明
- 用for循环替代手动维护计数器的while循环,从根源避免缩进错误、计数器忘记重置的低级问题
- 用Python原生列表切片做分组,比逐格计数判断的逻辑简洁很多,容错性更高
- 自动跳过空单元格,不会把空值写入结果
- 处理完的结果会单独存在新工作表里,不会覆盖原文件数据,控制台也会打印拆分后的内容方便校验
内容的提问来源于stack exchange,提问作者Sam Taylor
相关产品推荐
相关产品推荐

