You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 06:07:07