在日常办公中,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.pswp.cn/news/912043.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/912043.shtml
英文地址,请注明出处:http://en.pswp.cn/news/912043.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

从零构建Node.js服务托管前端项目

下面是一个完整的指南,教你如何从零开始构建一个Node.js服务来托管前端项目,并代理API请求到其他服务器。 1. 项目初始化 # 创建项目目录 mkdir node-proxy-server cd node-proxy-server# 初始化npm项目 npm init -y# 安装必要依赖 npm install expres…

Lynx vs React Native vs Flutter 全面对比:三大跨端框架实测分析

一文看懂三大热门跨端技术的历史渊源、架构机制、开发体验、包体积对比与性能评估。 我陪你用实测数据带你理性选型,不踩坑,不盲信。 1. 框架简介:它们是谁?来自哪里?干嘛用? 框架名称所属公司发布时间初衷…

CKESC的ROCK 180A-H 无人机电调:100V 高压冗余设计与安全保护解析

一、核心技术参数与性能指标 电压范围:支持 12~26S 锂电(适配 110V 高压系统)电流特性: 持续工作电流:90A(特定散热条件)瞬时耐流(1 秒):220A,3 …

优化 ArcPy 脚本性能

使用并行处理 如果硬件条件允许,可以使用 Python 的并行处理模块(如 multiprocessing)来同时处理多个小任务。这样可以充分利用多核处理器的优势,提高脚本的执行效率。 import multiprocessing def process_raster(raster):arcpy…

Windows下CMake通过鸿蒙SDK交叉编译三方库

前言 华为鸿蒙官方的文章CMake构建工程配置HarmonyOS编译工具链 中介绍了在Linux平台下如何使用CMake来配置鸿蒙的交叉编译环境,编译输出在Harmony中使用的第三方so库以及测试demo。 本文主要是在Windows下实现同样的操作。由于平台差异的原因,有些细节…

从C学C++(6)——构造函数和析构函数

从C学C(6)——构造函数和析构函数 若无特殊说明,本博客所执行的C标准均为C11. 构造函数与析构函数 构造函数定义 构造函数是特殊的成员函数,当创建类类型的新对象,系统自动会调用构造函数构造函数是为了保证对象的每个数据成员都被正确初…

清理 Windows C 盘该注意什么

C 盘空间不足会严重影响系统性能。 清理 C 盘文件时,首要原则是安全。错误地删除系统文件会导致 Windows 无法启动。下面我将按照 从最安全、最推荐到需要谨慎操作的顺序,为你详细列出可以清理的文件和文件夹,并提供操作方法。 第一梯队&…

Python Selenium 滚动到特定元素

文章目录 Python Selenium 滚动到特定元素⚙️ **1. 使用 scrollIntoView() 方法(最推荐)**🖱️ **2. 结合 ActionChains 移动鼠标(模拟用户行为)**🧩 **3. 使用坐标计算滚动(精确控制像素&…

你写的 Express 接口 404,可能是被“动态路由”吃掉了

本文首发在我的个人博客:你写的 Express 接口 404,可能是被“动态路由”吃掉了 前情提要 最近参与公司的一个项目前端 React,后端用的 Express。目前我就做一些功能的新增或者修改。 对于 Express ,本人没有公司项目实战经验&…

【Java面试】你是怎么控制缓存的更新?

🔄 一、数据实时同步失效(强一致性) 原理:数据库变更后立即失效或更新缓存,保证数据强一致。 实现方式: Cache Aside(旁路缓存): 读流程:读缓存 → 未命中则…

react-嵌套路由 二级路由

什么是嵌套路由? 在一级路由中又内嵌了其他路由,这种关系就叫做嵌套路由,嵌套至一级路由内的路由又称作二级路由 嵌套路由配置 实现步骤 配置二级路由 children嵌套 import Login from "../page/Login/index"; import Home from …

【CMake基础入门教程】第八课:构建并导出可复用的 CMake 库(支持 find_package() 查找)

很好!我们进入 第八课:构建并导出可复用的 CMake 库(支持 find_package() 查找)。 🎯 本课目标 你将掌握: 如何构建一个库并通过 install() 导出其配置; 如何让别人在项目中使用 find_package…

Jenkins与Kubernetes深度整合实践

采用的非jenkins-slave方式 jenkins配置: Jenkins添加k8s master节点的服务器信息 在Jenkins容器内部与k8s master节点设置免费登录 # docker过滤查询出运行的Jenkins服务 $ docker ps | grep jenkins# 进入Jenkins容器内部 $ docker exec -it jenkins-server /bi…

GraphQL API-1

简介 判断GraphQL方式 判断一个网站是否使用了GraphQL API,可以通过以下几种方法: 1. 检查网络请求 查看请求端点 GraphQL 通常使用单一端点,常见路径如: /graphql/api/graphql/gql/query 观察请求特征 POST 请求为主&…

推荐C++题目练习网站

LeetCode LeetCode是一个全球知名的编程练习平台,提供大量C题目,涵盖数据结构、算法、系统设计等。题目难度从简单到困难,适合不同水平的学习者。平台支持在线编写代码并即时运行测试,提供详细的题目讨论区和官方解答。 Codeforc…

Spring Cloud 微服务(服务注册与发现原理深度解析)

📌 摘要 在微服务架构中,服务注册与发现是整个系统运行的基础核心模块。它决定了服务如何被定位、调用和管理。 本文将深入讲解 Spring Cloud 中 Eureka 的服务注册与发现机制,从底层原理到源码分析,再到实际开发中的最佳实践&a…

【Linux 设备模型框架 kobject 和 kset】

Linux 设备模型框架 kobject 和 kset 一、Linux 设备模型概述二、kobject 与 kset 的核心概念1. kobject2. kset3. 关键数据结构 三、kobject 与 kset 的实现源码四、源码解析与使用说明1. kset 的创建与初始化2. kobject 的创建与属性3. sysfs 属性操作4. 用户空间访问示例 五…

一起学前端之HTML------(1)HTML 介绍

HTML 介绍 HTML 即超文本标记语言(HyperText Markup Language),它是构成网页的基础技术之一。HTML 借助各种标签(Tag)对网页的结构与内容加以描述。下面为你介绍其核心要点: 关键特性 标签结构&#xff…

整体迁移法迁移 Docker 镜像

docker添加了新的镜像数据盘,数据盘迁移步骤 使用整体迁移法迁移 Docker 镜像后,可以在确认迁移成功且新数据盘正常使用后,删除旧数据目录来释放空间1。 # 停止 Docker 服务 sudo systemctl stop docker # 停止 socket 监听器 sudo systemct…

智能IDE+高效数据采集,让数据获取接近0门槛

亮数据也有了自己的官方账号,大家可以关注:https://brightdata.blog.csdn.net/ 现在正有福利,有兴趣的伙伴可以访问链接: https://www.bright.cn/products/web-scraper/?utm_sourcebrand&utm_campaignbrnd-mkt_cn_csdn_jhx…