当前位置: 代码网 > it编程>前端脚本>Python > 使用Python实现Excel行列转置功能并保留单元格样式

使用Python实现Excel行列转置功能并保留单元格样式

2026年10月11日 • Python •我要评论
前言在数据处理场景中,经常会遇到表格行列互换需求:原始横向表格转为纵向,或是纵向指标表转为横向汇总表。手动复制粘贴转置在数据量大、需要自动化重复执行时效率很低。python 生态有多种处理 excel

前言

在数据处理场景中,经常会遇到表格行列互换需求:原始横向表格转为纵向,或是纵向指标表转为横向汇总表。手动复制粘贴转置在数据量大、需要自动化重复执行时效率很低。

python 生态有多种处理 excel 的方案,本文介绍如何使用免费库 free spire.xls for python 来实现行列转置。它的优势是不依赖本地安装 microsoft excel,可以直接读写 .xlsx/.xls 文件,并且能够保留单元格样式、格式,而不仅仅是纯文本数据。

说明:免费版一般适合中小型报表自动化场景,使用前先了解限制,大规模业务场景需要提前评估限制。

环境准备

python 版本要求:python3.6+

使用pip安装免费包:

pip install spire.xls.free

导入需要用到的模块:

from spire.xls import workbook, fileformat

实现思路

行列转置本质是矩阵转置:原表第i行第j列的数据,写入新区域的第j行第i列。

实现步骤:

  1. 加载excel文件,读取目标工作表
  2. 获取已使用数据区域,得到有效行数、列数
  3. 遍历原区域,缓存单元格值+样式
  4. 在工作表的空白区域写入转置后的数据,同步复制单元格样式
  5. 保存文件,释放资源

两种可选方案:

① 在同一张工作表空白区域写入转置结果;

② 新建工作表存放转置后数据。

下面示例同一张工作表方案,避免切 sheet 查看,也方便用公式引用原始区域。

完整代码示例

from spire.xls import workbook, fileformat

def transpose_excel(file_path: str, output_path: str):
    # 加载工作簿
    wb = workbook()
    wb.loadfromfile(file_path)
    sheet = wb.worksheets[0]

    # 获取当前工作表已使用范围
    used_range = sheet.allocatedrange
    row_count = used_range.rows.count
    col_count = used_range.columns.count

    # 目标空白区域起始位置
    start_row = row_count + 2
    start_col = col_count + 2

    # 遍历原区域,完成行列转置,同时复制单元格样式
    for r in range(1, row_count + 1):
        for c in range(1, col_count + 1):
            src_cell = sheet.range[r, c]
            # 转置:原r行c列 → 目标(start_row + c - 1, start_col + r - 1) 行/列
            dest_row = start_row + c - 1
            dest_col = start_col + r - 1
            dest_cell = sheet.range[dest_row, dest_col]
            dest_cell.value = src_cell.value
            # 复制单元格样式(字体、边框、背景色等)
            dest_cell.style = src_cell.style

    # 保存输出文件
    wb.savetofile(output_path, fileformat.version2016)
    # 释放资源
    wb.dispose()
    print(f"转置完成,文件输出至:{output_path}")


if __name__ == "__main__":
    transpose_excel("source.xlsx", "transposed_result.xlsx")

代码关键点解析

  1. allocatedrange:获取工作表实际占用的单元格区域,避免遍历大量空白单元格,提升执行效率。
  2. 单元格样式复制:dest_cell.style = src_cell.style,这是很多轻量库不具备的能力,可以保留原表格边框、背景色、字体格式。
  3. 资源释放 wb.dispose():该库底层是非托管资源,脚本结束建议主动释放,避免文件句柄占用。

测试结果

执行脚本后,transposed_result.xlsx 结果文件预览:

扩展:仅转置纯数据(不复制样式,速度更快)

from spire.xls import workbook, fileformat

def transpose_excel_data_only(file_path: str, output_path: str):
    wb = workbook()
    wb.loadfromfile(file_path)
    sheet = wb.worksheets[0]
    used_range = sheet.allocatedrange
    row_count = used_range.rows.count
    col_count = used_range.columns.count

    # 读取二维数组
    data = []
    for r in range(1, row_count + 1):
        row_data = []
        for c in range(1, col_count + 1):
            row_data.append(sheet.range[r, c].value)
        data.append(row_data)

    # 矩阵转置
    transposed_data = list(zip(*data))

    # 写入原区域正下方的空白区域
    start_row = row_count + 2
    for tr, row in enumerate(transposed_data, start=start_row):
        for tc, val in enumerate(row, start=1):
            sheet.range[tr, tc].value = val

    wb.savetofile(output_path, fileformat.version2016)
    wb.dispose()

与 pandas 方案对比

pandas:数据转置简单(df.t),但输出过程会重新构建工作表,原有格式(如单元格颜色、边框、列宽)无法保留,适用于纯数据分析场景而非文档格式保真场景。

free spire.xls:独立组件,无需 office,原生支持复制单元格样式。当报表带有复杂格式、边框、背景色需要保留时,这个方案会更省心。

小结

本文通过 free spire.xls for python 实现 excel 行列转置,重点演示带样式保留的场景,适合报表自动化、数据整理脚本开发。核心逻辑就是矩阵转置,通过遍历单元格把(r,c)映射到(c,r)。

以上就是使用python实现excel行列转置功能并保留单元格样式的详细内容,更多关于python excel行列转置的资料请关注代码网其它相关文章!

赞 (0)

相关文章:

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

发表评论

验证码:
Copyright © 2017-2026  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com