Python利用openpyxl合并Excel中值相同的单元格并居中

Jasper
Jasper
发布时间:2026-10-15| 6人浏览过
原创

本文介绍如何使用Python的openpyxl库批量处理Excel文件,自动识别并合并值相同的相邻单元格,同时实现内容居中。通过分段解析代码逻辑,提供从读取数据、判断合并到格式设置的完整方案,适用于需要简化表格显示的大批量数据处理场景。

前言

需要说明的是,本文涉及的代码并非完全原创,而是整合了多篇网络文章中的片段,例如如何定位相同内容的单元格、执行合并操作以及设置居中等功能。由于参考来源众多,此处不再逐一列出链接。本文旨在整理成一份个人学习笔记,供读者参考使用。

文章结构采用分段解析代码的方式,并在文末提供完整的可运行代码。

处理前的单元格状态

  ----------------------->

观察可见,部分姓名存在重复。我们的目标是将这些重复的姓名进行合并并居中显示。程序执行后的效果如对比图所示。

有人可能会质疑这是否多余,因为在Excel中直接点击“合并后居中”即可。然而,当面对大批量Excel表格的程序化处理时,这种方法能显著降低人工操作成本。

代码分解讲解

第一步,代码逻辑首先读取A列的内容,并将其存入一个列表中。

sumList = []
 
for i in range(2, sheet.max_row):
    value = sheet.cell(row=i, column=1).value
    if value:
        sumList.append(value)
    else:
        break

如果希望合并并居中的内容不在A列,只需修改代码中“column=”参数的值即可。

第二步,执行单元格合并操作。

preRow = 0
finRow = 0
flag = sumList[0]
 
for i in range(len(sumList)):
    if sumList[i] != flag:
        flag = sumList[i]
        finRow = i - 1
        if finRow >= preRow:
            sheet.merge_cells("A{}:A{}".format(preRow+2, finRow+2))
            preRow = finRow + 1
    if i == len(sumList) - 1:
        finRow = i
        sheet.merge_cells("A{}:A{}".format(preRow+2, finRow+2))

请注意,若需要合并的内容从第二行开始(假设第一行为表头),在format函数中preRow和finRow的值需加2,这是因为openpyxl库的行计数从1开始。

同理,若内容从第三行开始,则在format函数中preRow和finRow的值需加3。

对于急于使用的读者,无需深入理解这部分代码细节,只需按照上述提示修改相应数值,即可直接复制粘贴使用。

第三步,对第一列单元格进行居中格式设置。

wsArea = sheet["A{}:A{}".format(2, 2+len(sumList))]
for i in wsArea:
    for j in i:
        j.alignment = Alignment(horizontal='center', vertical='center')

本文完整代码展示

import os
import openpyxl
from openpyxl.styles import Alignment
 
# 获得当前py文件的路径
path = os.getcwd()
 
# 打开py文件目录下的名为test.xlsx文件的第一张sheet页
wb = openpyxl.load_workbook(path + "/test.xlsx")
sheet = wb["Sheet1"]
 
# 先把A列的所有内容放入一个List中
sumList = []
 
for i in range(2, sheet.max_row):
    value = sheet.cell(row=i, column=1).value
    if value:
        sumList.append(value)
    else:
        break
 
# 开始合并单元格
preRow = 0
finRow = 0
flag = sumList[0]
 
for i in range(len(sumList)):
    if sumList[i] != flag:
        flag = sumList[i]
        finRow = i - 1
        if finRow >= preRow:
            sheet.merge_cells("A{}:A{}".format(preRow+2, finRow+2))
            preRow = finRow + 1
    if i == len(sumList) - 1:
        finRow = i
        sheet.merge_cells("A{}:A{}".format(preRow+2, finRow+2))
 
# 居中单元格
wsArea = sheet["A{}:A{}".format(2, 2+len(sumList))]
for i in wsArea:
    for j in i:
        j.alignment = Alignment(horizontal='center', vertical='center')
 
# 保存表
wb.save(path + '/test1.xlsx')
 

总结

本文已分别阐述了代码的核心逻辑,并说明了如何修改以适应个人需求及预期的执行效果,希望这对大家有所帮助。

至此,关于Python处理Excel合并居中相同值单元格的介绍已结束。如需了解更多Python Excel相关内容,请搜索本站历史文章或继续浏览后续文章,感谢支持!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。