Python合并和取消合并Excel单元格的完整教学

 更新时间:2026年09月01日 11:41:02   作者:咕白m625  
本文将介绍如何利用 Python 和 Free Spire.XLS 库,以简洁的代码完成合并行、合并列、合并指定区域以及取消合并(拆分)等全部常见场景,文中的示例代码讲解详细,感兴趣的小伙伴可以了解下

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

1. 准备工作

首先通过 pip 安装所需库:

pip install Spire.XLS.Free

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

from spire.xls import *
from spire.xls.common import *

2. 合并整行

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

# 加载工作簿
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()

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

4. 合并指定单元格区域

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

# 合并 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() 方法。可以取消特定单元格所在的合并区域,也可以针对整行/整列批量取消。

取消单个合并区域

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

取消整行的合并

sheet.Rows[0].UnMerge()

取消整列的合并

sheet.Columns[1].UnMerge()

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

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

6. 综合代码示例

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

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 属性。

以上就是Python合并和取消合并Excel单元格的完整教学的详细内容,更多关于Python合并和取消合并Excel单元格的资料请关注脚本之家其它相关文章!

相关文章

最新评论