5人参与 • 2026-09-18 • Python
在数据分析、报表处理与办公自动化中,excel 的“列转行”(或称“行列转置”)是一项高频需求。无论是整理原始数据、重构报表结构,还是将纵向的数据明细转换为横向的汇总展示,都需要用到这一技巧。
本文我们将详细介绍 4 种常见的 excel 内置的行列转置方法,介绍其原理并给出具体操作步骤;同时,针对无 office 环境、服务端运行以及批量自动化等需求,提供基于 python 的代码实现方案。
选择性粘贴是将内存中源区域的矩阵行列坐标直接翻转($a_{ij} > a_{ji}$)并写入目标位置。这种方式属于静态复制,适合数据后续不会再发生变动的一性处理场景。
操作步骤:
这是去掉步骤小标题并保持排版简洁清晰的版本:
ctrl + c。(注意:请勿使用 ctrl + x 剪切,剪切状态下转置功能不可用)。
函数公式法通过在目标单元格与源单元格之间建立动态引用实现转置。当源数据还在持续更新,且希望转换后的数据能够实时同步变化时,可以使用函数公式。
a:transpose 动态数组函数
操作步骤:
对于 excel 365 / office 2021 及更新版本:直接在目标单元格输入公式 =transpose(a1:b7),按 enter 回车即可。excel 会自动填充对应的行列数据。
对于 excel 2019 及更早版本(传统 cse 数组公式):
d1:j2)。=transpose(a1:b7)。
按下 ctrl + shift + enter 组合键完成数组公式填充。
b:index + row / column 坐标函数映射
利用 column() 在公式向右填充时依次递增(1, 2, 3...)的特性,动态改变 index 函数在源列中的行索引,从而将纵向的列映射为横向的行。
典型公式与操作:
在目标单元格输入公式:=index($a$1:$a$10, column(a1))。

选中目标单元格,向右拖拽填充柄,公式中的 column(a1) 会依次变为 column(b1)、column(c1),实现动态映射。
power query(在 excel 2016 及更高版本中位于数据选项卡中)基于 m 语言进行列式运算与数据重构,适合在处理复杂的二维交叉表或进行数据清洗时使用。
操作步骤:
选中源数据区域,点击菜单栏数据 > 自表格/区域(若未建立表,excel 会自动将其转换为标准数据表)。

根据具体需求选择转换方式:
在 power query 编辑器顶部菜单点击转换选项卡,找到并点击转置,实现整表行列互换。

- 选中无需转换的属性列,右键选择逆透 视其他列(或选中需要转换的多列后右键选择逆透 视列),将多列属性转换为属性-值的多行纵向结构。

点击左上角主页> 关闭并加载,转置后的数据将被写入一张全新的工作表中。
vba 宏通过 com 接口直接调用 excel 引擎内置的 worksheetfunction.transpose 接口或对数组进行转置处理。如果需要频繁对固定结构的表格进行转置,可以通过编写 vba 宏脚本将这个功能自动化。
操作步骤:
alt + f11 打开 vba 编辑器(vbe)。
在代码窗口粘贴以下 vba 代码:
sub transposecolumntorow()
dim sourcerange as range
dim targetrange as range
set sourcerange = sheet1.range("a1:a10")
set targetrange = sheet1.range("c1:l1")
targetrange.value = application.worksheetfunction.transpose(sourcerange.value)
end sub按 f5 运行或在 excel 界面绑定按钮执行。
.xlsm 文件在企业邮件或系统上传时常被阻止;无法部署在 linux 服务器或 docker 容器中静默运行。尽管上述四种方法已经能够覆盖常见的办公需求了,但综合分析以上 4 种内置解法,仍然能够发现它们在应用与服务端自动化场景中,存在以下难点:
因此,在无 ms office 的服务器或自动化运维环境下,需要一种能够通过 python 脚本进行独立、高效且批量处理的解决方案。
spire.xls for python 是一个独立运行的 excel api 组件,支持在不安装 microsoft excel 或 wps 的前提下,在 python 环境中创建、读取、编辑和转换 excel 文件。
它在处理行列转置任务时,还能够同时读取数据与单元格的字体、背景色、边框样式,并将其应用到目标转置区域。
在命令行终端中运行以下命令安装:
pip install spire.xls
下面的代码展示了如何读取指定列的有效数据及其样式,并将其转置写入目标行中:
from spire.xls import *
from spire.xls.common import *
# 设置文件路径
input_file = "/input/欧洲人口数量前十.xlsx"
output_file = "/output/转置指定列.xlsx"
source_col = 1 # 需要转置的源列索引(1 表示 a 列)
target_row = 13 # 转置后写入的目标起始行
target_start_col = 1 # 转置后写入的目标起始列(1 表示从 a 列开始横向写入)
# 加载文件并获取第一个工作表
workbook = workbook()
workbook.loadfromfile(input_file)
worksheet = workbook.worksheets[0]
# 读取指定列数据与样式
column_data = []
max_row = worksheet.lastrow
for row_index in range(1, max_row + 1):
cell = worksheet.range[row_index, source_col]
# 跳过空单元格
if cell.value is none or str(cell.value).strip() == "":
continue
# 存储单元格的值与其 style 样式对象
column_data.append((cell.value, cell.style))
# 将列数据横向写入目标行
for idx, (value, source_style) in enumerate(column_data):
target_col = target_start_col + idx
target_cell = worksheet.range[target_row, target_col]
# 赋值与样式迁移
target_cell.value = value
target_cell.style = source_style
# 保存修改后的文件
workbook.savetofile(output_file, excelversion.version2016)
workbook.dispose()
print(f"单列转置完成!结果已保存至: {output_file}")
下面的代码示例展示了如何获取第一个工作表的数据并将其全部进行行列转置,转置后的数据仍然放在原表中:
from spire.xls import *
from spire.xls.common import *
# 设置文件路径
input_file = "/input/欧洲人口数量前十.xlsx"
output_file = "/output/output.xlsx"
# 加载文件并获取第一个工作表
workbook = workbook()
workbook.loadfromfile(input_file)
worksheet = workbook.worksheets[0]
# 获取原表动态最大行列数
max_row = worksheet.lastrow
max_col = worksheet.lastcolumn
# 读取工作表数据与样式
table_data = []
for r in range(1, max_row + 1):
row_cells = []
for c in range(1, max_col + 1):
cell = worksheet.range[r, c]
row_cells.append((cell.value, cell.style))
table_data.append(row_cells)
# 将原表数据转置写入目标工作表
start_target_row = max_row + 2
for r_idx in range(max_row):
for c_idx in range(max_col):
val, style = table_data[r_idx][c_idx]
# 行列坐标互换:原表[r][c] 映射为 目标表[c][r]
target_cell = worksheet.range[start_target_row + c_idx, 1 + r_idx]
target_cell.value = val
target_cell.style = style
# 保存修改后的文件
workbook.savetofile(output_file, excelversion.version2016)
workbook.dispose()
print(f"转置完成!结果已保存至: {output_file}")
下表对上述方案进行了维度对比:
| 选型维度 | 选择性粘贴 | 函数公式法 | power query | vba 宏 | spire.xls for python |
|---|---|---|---|---|---|
| 主要操作方式 | gui 界面交互 | 公式表达式 | 可视化 etl / m语言 | vba 编程 | python 代码 |
| 数据动态联动 | 否(静态快照) | 是(实时同步) | 是(手动/定时刷新) | 否(需事件触发) | 属于自动化脚本重新生成 |
| 运行环境要求 | 桌面端 excel | 桌面端 excel | 桌面端 excel | 依赖 ms office | 无第三方依赖 (windows/linux/mac) |
| 批量处理能力 | 仅限单表 | 仅限单表 | 较强 | 受限于本地环境 | 无界面并发处理 |
| 单元格样式保留 | 是 | 否(仅留数据) | 否(转换为标准表样式) | 需编写额外代码 | 是(支持 style 迁移) |
| 典型适用场景 | 临时单次处理 | 同一表格内数据联动 | 报表清洗与规范化 | 本地 excel 自动化 | linux 服务端、python 后端系统 |
对于日常办公中的单次少量数据,使用选择性粘贴或 transpose 公式均可满足需求;在进行二维报表清洗时,power query 也是常用的桌面工具。
而在需要进行批量自动化处理或保留原表格样式的场景下,使用 spire.xls for python 等第三方库能够在不需要依赖 microsoft office 的前提下完成相关的自动化需求。
以上就是python批量自动化实现excel行列转换全指南的详细内容,更多关于python excel行列转换的资料请关注代码网其它相关文章!
您想发表意见!!点此发布评论
版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。
发表评论