Python脚本实现列内循环选单元格区域并转置粘贴至下工作表
Python Excel循环选取区域并转置粘贴方案
假设你用openpyxl库操作Excel(新手友好且功能足够),以下是完整的循环实现代码,整合你已有的转置逻辑:
核心循环逻辑说明
- 初始起始行:
start_row = 2(对应B2) - 每次选取17行:结束行是
start_row + 16(从start_row开始数17行,比如2到19是17行:19-2+1=17) - 循环终止条件:当
start_row + 16超过源工作表的最大行时停止 - 每次循环后起始行加6:
start_row += 6
完整代码示例
from openpyxl import load_workbook # 加载工作簿,替换为你的文件路径 wb = load_workbook("你的Excel文件.xlsx") # 源工作表(B列所在表,默认取第一个工作表) source_ws = wb.worksheets[0] # 目标工作表(下一张表,默认取第二个工作表) target_ws = wb.worksheets[1] # 初始化参数 start_row = 2 row_count = 17 step = 6 max_source_row = source_ws.max_row # 循环执行选取与转置粘贴 while start_row + row_count - 1 <= max_source_row: # 选取B列指定区域 selected_range = source_ws[f"B{start_row}:B{start_row + row_count - 1}"] # 转置列数据为行数据 transposed_data = list(zip(*selected_range)) # 获取目标表下一个空行 target_row = target_ws.max_row + 1 # 粘贴转置后的数据 target_ws.append(transposed_data[0]) # 更新起始行,进入下一轮循环 start_row += step # 保存修改后的文件 wb.save("处理后的Excel文件.xlsx")
关键部分解释
while循环:确保不会选取超出源表范围的无效区域zip(*selected_range):快速实现列转行的核心逻辑target_ws.append():自动把转置后的行数据追加到目标表空行,无需手动计算列位置
如果习惯用pandas,可以用更简洁的版本:
import pandas as pd # 读取源工作表数据 df = pd.read_excel("你的Excel文件.xlsx", sheet_name=0) target_df = pd.DataFrame() # pandas行索引从0开始,对应Excel的B2是索引1 start_idx = 1 row_count = 17 step = 6 while start_idx + row_count - 1 < len(df): # 选取B列指定区域 selected_col = df['B'].iloc[start_idx:start_idx+row_count] # 转置为行 transposed_row = selected_col.values.reshape(1, -1) # 添加到目标数据集 target_df = pd.concat([target_df, pd.DataFrame(transposed_row)], ignore_index=True) # 写入目标工作表 with pd.ExcelWriter("你的Excel文件.xlsx", mode='a', if_sheet_exists='replace') as writer: target_df.to_excel(writer, sheet_name=1, index=False, header=False)
内容的提问来源于stack exchange,提问作者Lee
相关产品推荐
相关产品推荐

