it编程 > 前端脚本 > Python

Python批量自动化实现Excel行列转换全指南

5人参与 2026-09-18 Python

在数据分析、报表处理与办公自动化中,excel 的“列转行”(或称“行列转置”)是一项高频需求。无论是整理原始数据、重构报表结构,还是将纵向的数据明细转换为横向的汇总展示,都需要用到这一技巧。

本文我们将详细介绍 4 种常见的 excel 内置的行列转置方法,介绍其原理并给出具体操作步骤;同时,针对无 office 环境、服务端运行以及批量自动化等需求,提供基于 python 的代码实现方案。

一、使用 microsoft excel 自带的功能实现行列转置

1. 选择性粘贴(静态转置)

选择性粘贴是将内存中源区域的矩阵行列坐标直接翻转($a_{ij} > a_{ji}$)并写入目标位置。这种方式属于静态复制,适合数据后续不会再发生变动的一性处理场景。

操作步骤:

这是去掉步骤小标题并保持排版简洁清晰的版本:

在粘贴时使用转置

2. 函数公式法(动态联动)

函数公式法通过在目标单元格与源单元格之间建立动态引用实现转置。当源数据还在持续更新,且希望转换后的数据能够实时同步变化时,可以使用函数公式。

a:transpose 动态数组函数

操作步骤:

对于 excel 365 / office 2021 及更新版本:直接在目标单元格输入公式 =transpose(a1:b7),按 enter 回车即可。excel 会自动填充对应的行列数据。

对于 excel 2019 及更早版本(传统 cse 数组公式):

使用transpose函数实现行列转置

按下 ctrl + shift + enter 组合键完成数组公式填充。

b:index + row / column 坐标函数映射

利用 column() 在公式向右填充时依次递增(1, 2, 3...)的特性,动态改变 index 函数在源列中的行索引,从而将纵向的列映射为横向的行。

典型公式与操作:

在目标单元格输入公式:=index($a$1:$a$10, column(a1))

使用index函数转置行和列

选中目标单元格,向右拖拽填充柄,公式中的 column(a1) 会依次变为 column(b1)column(c1),实现动态映射。

3. power query 法(取消列透 视 / 逆透 视)

power query(在 excel 2016 及更高版本中位于数据选项卡中)基于 m 语言进行列式运算与数据重构,适合在处理复杂的二维交叉表或进行数据清洗时使用。

操作步骤:

选中源数据区域,点击菜单栏数据 > 自表格/区域(若未建立表,excel 会自动将其转换为标准数据表)。

创建power query表

根据具体需求选择转换方式:

在 power query 编辑器顶部菜单点击转换选项卡,找到并点击转置,实现整表行列互换。

在power query中转置行和列

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

转置指定列

点击左上角主页> 关闭并加载,转置后的数据将被写入一张全新的工作表中。

4. vba 宏自动化法(本地脚本自动化)

vba 宏通过 com 接口直接调用 excel 引擎内置的 worksheetfunction.transpose 接口或对数组进行转置处理。如果需要频繁对固定结构的表格进行转置,可以通过编写 vba 宏脚本将这个功能自动化。

操作步骤:

使用vba实现列转置为行

在代码窗口粘贴以下 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 界面绑定按钮执行。

二、内置解法的局限

尽管上述四种方法已经能够覆盖常见的办公需求了,但综合分析以上 4 种内置解法,仍然能够发现它们在应用与服务端自动化场景中,存在以下难点:

因此,在无 ms office 的服务器或自动化运维环境下,需要一种能够通过 python 脚本进行独立、高效且批量处理的解决方案。

三、python 自动化实现 excel 行列转置

spire.xls for python 是一个独立运行的 excel api 组件,支持在不安装 microsoft excel 或 wps 的前提下,在 python 环境中创建、读取、编辑和转换 excel 文件。

它在处理行列转置任务时,还能够同时读取数据与单元格的字体、背景色、边框样式,并将其应用到目标转置区域。

1. 环境准备

在命令行终端中运行以下命令安装:

pip install spire.xls

2. 单表列转行(带格式转置)

下面的代码展示了如何读取指定列的有效数据及其样式,并将其转置写入目标行中:

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}")

使用python转换指定列为行

3. 实战二:转换整个工作表

下面的代码示例展示了如何获取第一个工作表的数据并将其全部进行行列转置,转置后的数据仍然放在原表中:

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}")

使用python将整个工作表中的列转换为行

四、你应该选择哪种方案?

下表对上述方案进行了维度对比:

选型维度选择性粘贴函数公式法power queryvba 宏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行列转换的资料请关注代码网其它相关文章!

(0)

您想发表意见!!点此发布评论

推荐阅读

Python对HTML进行预处理的全流程

09-18

Python如何处理UTF-8 BOM编码标记

09-18

Python中数据类型转换与格式化输出实战指南

09-18

使用Python给Word文档添加文本和图片水印的完整指南

09-18

Python使用库之标准库与第三方库实战指南

09-18

Python json模块怎么用?字典列表转JSON字符串详解

09-18

猜你喜欢

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论