本文将介绍如何利用 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单元格的资料请关注代码网其它相关文章!
发表评论