当前位置: 首页 > news >正文

[特殊字符] Python 批量合并 Word 表格中重复单元格教程(收货记录案例实战)

在日常办公中,Word 表格中常出现重复的“供应商名称”或“物料编码”,会导致表格冗余且视觉混乱。这时候,用 Python 自动合并重复单元格可以大幅提升表格专业度和可读性。本篇给大家演示如何用 python-docx 实现该功能。

✅ 功能概览

  • 自动读取 Word 文件中的第一个表格;

  • 检测指定列中连续重复的单元格;

  • 合并重复项所在区域,留下首行内容;

  • 最终覆盖内容并保存至新文档。


🛠️ 核心函数:Merge_cells

这个函数可以实现按照列 index 合并 Word 表格中重复值连续区域:

def Merge_cells(table, target_list, start_row, col):"""table       : docx Table 对象(目标表格)target_list : 待处理列值列表,按行顺序提取start_row   : 数据开始行,标题行除外,0 为第一行col         : 待合并列的列索引(0 起始)"""start = end = 0reference = target_list[0]for i in range(len(target_list)):if target_list[i] != reference:reference = target_list[i]end = i - 1table.cell(start + start_row, col).merge(table.cell(end + start_row, col))start = end + 1if i == len(target_list) - 1:end = itable.cell(start + start_row, col).merge(table.cell(end + start_row, col))
  • 利用双指针 startend 识别连续相同内容;

  • cell(...).merge(...) 方法实现合并;

  • 该方法底层调用的是 python-docx 提供的 [Cell].merge() 方法 github.com+5python-docx.readthedocs.io+5stackoverflow.com+5。

 

🔄 完整流程:读取、合并、覆盖、保存 

from docx import Documentdoc = Document("收货记录.docx")
table = doc.tables[0]# 提取列数据
supplier = [table.rows[i].cells[1].text for i in range(1, len(table.rows)-1)]
pn       = [table.rows[i].cells[2].text for i in range(1, len(table.rows)-1)]# 合并单元格
Merge_cells(table, supplier, start_row=1, col=1)
Merge_cells(table, pn, start_row=1, col=2)# 重写覆盖内容以消除合并后空白
for i, row in enumerate(range(1, len(supplier)+1), start=1):table.cell(row, 1).text = supplier[i-1]table.cell(row, 2).text = pn[i-1]doc.save("收货记录-合并单元格.docx")
  • table.rows 访问所有行;

  • 合并执行后,其他重复行内容清空,因此要覆盖填值;

  • 最终生成文件名带“合并单元格”的新文档。

🖼️ 结果展示区

 

 

⚙️ 技术详解 & 注意事项

  1. 合并操作只保留左上单元内容,其他单元秒变空白但保留格式;

  2. python-docx 的 Cell.merge() 接受两个对角单元格,自动合并区域中所有 cells python-docx.readthedocs.io;

  3. Word 表格支持跨行/跨列合并,merge() 方法基于布局网格处理;

  4. 处理完成后务必覆盖空白单元格,否则部分数据会丢失;

  5. 可扩展到任意列,只需按 col 参数调用函数。


🧠 总结

功能描述
自动合并自动识别并合并 Word 表格列中连续重复值
覆盖数据合并后补写内容,防止空白单元格产生
灵活调用可应用于任意列和场景,支持多列多表操作

这段代码适用于多情境,如“收货记录”“发票汇总”“项目进度表”,省时、高效、美观。如需支持列样式统一、支持拆分合并、或加入 progress bar 等功能,都可以继续扩展和完善,有需要的话随时告诉我!

 

http://www.lqws.cn/news/547147.html

相关文章:

  • 从零开始的二三维CAD|CAE轻量级软件开发:学习以及研发,Gmsh的脚本编辑器设计!
  • python 脚本 遍历目录,并把目录下的非utf-8文件改成utf8
  • 16.2 Docker多阶段构建实战:LanguageMentor镜像瘦身40%,支持500+并发1.2秒响应!
  • 02【C++ 入门基础】标准输入输出初识/缺省参数
  • Qt 与 Halcon 联合开发六:基于海康SDK设计完整的相机类【附源码】
  • 【Elasticsearch】Linux环境下安装Elasticsearch
  • git rebase -i 详解
  • 微服务中解决高并发问题的不同方法!
  • 未来蓝图:引领能源数字化新浪潮
  • html制作一个简单的表单
  • 每天一个前端小知识 Day 14 - 前端状态管理深入实践
  • [1-01-01].第27节:常用类 - 包装类
  • 26考研|数学分析:隐函数定理及其应用
  • 官方App Store,直链下载macOS ,无需Apple ID,macOS10.10以上.
  • php flush实时输出线上环境好使,本地环境等待一段时间后一次性输出结果的原因
  • 跨芯片 AI 算子库 FlagGems 正式加入PyTorch 基金会生态项目体系
  • MyBatis中的SQL理解
  • uniappx 安卓app项目本地打包运行,腾讯地图报错:‘鉴权失败,请检查你的key‘
  • Unity性能优化-渲染模块(1)-CPU侧(1)-优化方向
  • 基于springboot的火锅店点餐系统
  • 分布式存储架构的优势
  • 河北对口计算机高考C#笔记(2026高考适用)---完结版~~~~
  • GPS不只是导航,实时定位追踪系统如何玩转智能时代?
  • 深度学习框架入门指南:PyTorch 核心实战
  • 第N5周:Pytorch文本分类入门
  • 使用GDAL库统计不同分区内的灾害点分布情况,计算灾害相对密度等统计指标
  • Spring Boot 3.2.11 Swagger版本推荐
  • Python 数据分析与可视化 Day 9 - 缺失值与异常值处理技巧
  • 从0到100:房产中介小程序开发笔记(中)
  • css去掉换行小工具 去掉css换行 style样式去掉换行