使用 Python 合并与取消合并 Excel 单元格

本文将介绍如何利用 Python 和 Free Spire.XLS 库,以简洁的代码完成合并行、合并列、合并指定区域以及取消合并(拆分)等全部常见场景。该方案无需 Excel、WPS 客户端环境,程序运行机器无需安装办公软件,即可读写 xls、xlsx 文件,聚焦文档格式与数据操作,适合脚本自动化、数据预处理等场景。


1. 准备工作

首先通过 pip 安装所需库:

bash 复制代码
pip install Spire.XLS.Free

在 Python 脚本开头导入必要的模块:

python 复制代码
from spire.xls import *
from spire.xls.common import *

2. 合并整行

若要将某一行中的所有单元格合并为一个整体,例如创建跨列的表头,可使用 Rows[index].Merge() 方法(索引从 0 开始)。

python 复制代码
# 加载工作簿
workbook = Workbook()
workbook.LoadFromFile("销售数据.xlsx")
sheet = workbook.Worksheets[0]

# 将第 1 行(索引0)全部合并
sheet.Rows[0].Merge()
# 填充合并后的内容(仅左上角单元格有效)
sheet.Range["A1"].Value = "2026年度销售汇总"

workbook.SaveToFile("合并行结果.xlsx", ExcelVersion.Version2013)
workbook.Dispose()

3. 合并整列

类似地,如果希望将某一列所有单元格合并,比如创建垂直的类别标识,使用 Columns[index].Merge()

python 复制代码
# 合并第 2 列(索引1,即B列)
sheet.Columns[1].Merge()
# 内容仅保留在 B1 单元格
sheet.Range["B1"].Value = "地区分类"

4. 合并指定单元格区域

最灵活的方式是合并任意矩形区域,如标题跨多列、小计跨多行等。使用 Range["起始单元格:结束单元格"].Merge()

python 复制代码
# 合并 A1 到 E1(横向跨5列)
sheet.Range["A1:E1"].Merge()

# 合并 C3 到 C8(纵向跨6行)
sheet.Range["C3:C8"].Merge()

# 合并 D4 到 F6(2行×3列)
sheet.Range["D4:F6"].Merge()

注意:合并后,只有区域左上角的单元格值会被保留,其余单元格的值会被自动清除,请提前备份数据。


5. 取消合并(拆分单元格)

取消合并与合并操作对应,使用 UnMerge() 方法。可以取消特定单元格所在的合并区域,也可以针对整行/整列批量取消。

取消单个合并区域

python 复制代码
# 拆分包含 A1 的合并区域(传入区域内任意单元格即可)
sheet.Range["A1"].UnMerge()

取消整行的合并

python 复制代码
sheet.Rows[0].UnMerge()

取消整列的合并

python 复制代码
sheet.Columns[1].UnMerge()

一次性拆分工作表中所有合并区域

python 复制代码
merged_list = sheet.MergedCells   # 获取所有合并区域列表
for cell_range in merged_list:
    cell_range.UnMerge()

6. 综合代码示例

下面提供一个完整脚本,涵盖加载文件、同时进行三种合并操作、保存结果,然后再演示取消合并的过程。

python 复制代码
from spire.xls import *
from spire.xls.common import *

def merge_demo():
    # ----- 步骤1:加载源文件 -----
    workbook = Workbook()
    workbook.LoadFromFile("原始报表.xlsx")
    sheet = workbook.Worksheets[0]

    # ----- 步骤2:执行多种合并 -----
    # 2.1 合并第1行作为大标题
    sheet.Rows[0].Merge()
    sheet.Range["A1"].Value = "全国门店销售总览"

    # 2.2 合并B列作为区域分类
    sheet.Columns[1].Merge()
    sheet.Range["B1"].Value = "大区"

    # 2.3 合并 D2:E4 区域作为备注说明
    sheet.Range["D2:E4"].Merge()
    sheet.Range["D2"].Value = "注:数据不含港澳台"

    # ----- 步骤3:保存合并后的文件 -----
    workbook.SaveToFile("合并结果.xlsx", ExcelVersion.Version2013)
    workbook.Dispose()

    # ----- 步骤4:演示取消合并(重新加载) -----
    workbook2 = Workbook()
    workbook2.LoadFromFile("合并结果.xlsx")
    sheet2 = workbook2.Worksheets[0]

    # 取消合并 D2:E4 区域
    sheet2.Range["D2"].UnMerge()

    # 取消合并第1行
    sheet2.Rows[0].UnMerge()

    workbook2.SaveToFile("取消合并结果.xlsx", ExcelVersion.Version2013)
    workbook2.Dispose()

if __name__ == "__main__":
    merge_demo()

运行该脚本后,你会得到两个文件:合并结果.xlsx 展示所有合并效果,取消合并结果.xlsx 则恢复了部分区域的拆分状态。


7. 常见注意事项

  • 内容保留规则:合并操作仅保留左上角单元格的值,若区域内有其他数据,它们将被丢弃。建议在合并前完成数据填充,或先备份原始数据。
  • 合并后写入数据 :合并完成后,向合并区域写入数据时,仍然只能通过左上角单元格的地址(如 Range["A1"].Value = ...)进行赋值。
  • 性能考量 :如果工作表中存在大量合并区域,频繁调用 Merge()UnMerge() 可能稍慢,建议批量操作。
  • 异常处理 :若传入的单元格区域已有合并状态,再次合并不会报错,但可能产生嵌套合并问题,建议先检查 MergedCells 属性。
相关推荐
Lenyiin13 分钟前
第6篇_Python高级语法与标准库精髓:从会用到达精通
java·python·html
ZGG00320 分钟前
真题拆解 05:ReAct 还是 Plan-and-Execute——规划范式怎么选
python·agent·react
斑马13920 分钟前
Linux软件编程学习笔记(十)——网络(二)——TCP通信
开发语言·网络·php
多敲代码防脱发24 分钟前
Alibaba Sentinel(熔断、限流)(国内下载Sentinel)
java·开发语言·sentinel
艺杯羹26 分钟前
双轨大模型路由实战:从端侧Ollama边缘推理到云端大模型容灾降级架构深度拆解
开发语言·人工智能·ai·架构·php
quantdash_cc28 分钟前
量化数据管道为什么会出现历史 K 线缺口?从 API 请求到数据质量的完整排查方法
开发语言·python·数据分析·量化·股票数据·quantdash
用户77833661321116 小时前
用 React Hook 封装搜索数据:useSerp 的防抖、缓存与错误处理
python·api