python-docx复制的行格式多出一个单元格

目录

一、问题

二、原因

三、解决方法


一、问题

我需要在下述表格中第三行的编号、证件名称、来源、证明对象一列的第三行填入1、1、1、1,之后复制第三行的格式,再填入2、2、2、2,再复制第三行的格式,填入3、3、3、3,以此类推。

from docx import Documentdef generate_ELdocx(evidence_name, evidence_source, evidence_object, all_names_sources_objects, template_docx):doc = Document(template_docx)table = doc.tables[0]# 从第三行开始填入内容,因此索引从2开始start_row_index = 2# 填写第三行的内容table.cell(start_row_index, 0).text = '1'  # 第1列table.cell(start_row_index, 1).text = evidence_name  # 第2列table.cell(start_row_index, 5).text = evidence_source  # 第6列table.cell(start_row_index, 6).text = evidence_object  # 第7列# 假设复制第三行的格式copy_row_index = start_row_indexcopy_row = table.rows[copy_row_index]copy_row_height = copy_row.height  # 获取要复制的行的高度if all_names_sources_objects:row_number = 2  # 从第二行开始的行号for names_sources_objects in all_names_sources_objects:evidence_name = names_sources_objects['evidence_name']evidence_source = names_sources_objects['evidence_source']evidence_object = names_sources_objects['evidence_object']# 添加新行并复制高度new_row = table.add_row()new_row.height = copy_row_height  # 设置新行的高度# 复制第三行格式并设置新行的单元格内容for index, cell in enumerate(copy_row.cells):new_cell = new_row.cells[index]paragraph = new_cell.paragraphs[0]run = paragraph.add_run()# 复制字体大小、粗体、斜体等格式if cell.paragraphs[0].runs:example_run = cell.paragraphs[0].runs[0]run.font.bold = example_run.font.boldrun.font.size = example_run.font.sizerun.font.color.rgb = example_run.font.color.rgb# 复制段落对齐格式if cell.paragraphs:paragraph_format = cell.paragraphs[0].paragraph_formatparagraph.alignment = paragraph_format.alignment# 自动填入第1列的行号new_row.cells[0].text = str(row_number)  # 第1列new_row.cells[1].text = evidence_name  # 第2列new_row.cells[5].text = evidence_source  # 第6列new_row.cells[6].text = evidence_object  # 第7列row_number += 1return doc

①但使用上述代码中

②填入信息

③生成的表格的问题是

二、原因

原因:在 Word 表格中,单元格的合并信息可能没有正确复制。当使用 docx 库新增行时,它会按照默认的表格结构创建新行,而不会自动复制行中的合并信息(例如单元格的合并)。因此,如果第三行的第二列原本是多个单元格合并而成的,而在新创建的行中没有合并这些单元格,就会导致额外的单元格出现。

再还有一个迹象:索引需要填写6、7才能填入真正的6、7列。

三、解决方法

使用 docx 库提供的合并方法来合并新行中的单元格,使其与第三行的布局一致。

from docx import Documentdef generate_ELdocx(evidence_name, evidence_source, evidence_object, all_names_sources_objects, template_docx):doc = Document(template_docx)table = doc.tables[0]# 从第三行开始填入内容,因此索引从2开始start_row_index = 2# 填写第三行的内容table.cell(start_row_index, 0).text = '1'  # 第1列table.cell(start_row_index, 1).text = evidence_name  # 第2列table.cell(start_row_index, 6).text = evidence_source  # 第6列table.cell(start_row_index, 7).text = evidence_object  # 第7列# 假设复制第三行的格式copy_row_index = start_row_indexcopy_row = table.rows[copy_row_index]copy_row_height = copy_row.height  # 获取要复制的行的高度if all_names_sources_objects:row_number = 2  # 从第二行开始的行号for names_sources_objects in all_names_sources_objects:evidence_name = names_sources_objects['evidence_name']evidence_source = names_sources_objects['evidence_source']evidence_object = names_sources_objects['evidence_object']# 添加新行并复制高度new_row = table.add_row()new_row.height = copy_row_height  # 设置新行的高度# 复制第三行中的单元格合并信息for index, cell in enumerate(copy_row.cells):if index in [1]:  # 假设第二列(index = 1)在第三行是合并单元格if len(copy_row.cells) > 1:  # 检查是否存在需要合并的单元格# 合并单元格new_row.cells[1].merge(new_row.cells[2])  # 合并第二列的单元格# 复制第三行格式并设置新行的单元格内容for index, cell in enumerate(copy_row.cells):new_cell = new_row.cells[index]paragraph = new_cell.paragraphs[0]run = paragraph.add_run()# 复制字体大小、粗体、斜体等格式if cell.paragraphs[0].runs:example_run = cell.paragraphs[0].runs[0]run.font.bold = example_run.font.boldrun.font.size = example_run.font.sizerun.font.color.rgb = example_run.font.color.rgb# 复制段落对齐格式if cell.paragraphs:paragraph_format = cell.paragraphs[0].paragraph_formatparagraph.alignment = paragraph_format.alignment# 自动填入第1列的行号new_row.cells[0].text = str(row_number)  # 第1列new_row.cells[1].text = evidence_name  # 第2列new_row.cells[6].text = evidence_source  # 第6列new_row.cells[7].text = evidence_object  # 第7列row_number += 1return doc

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/409914.html

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

相关文章

VBA技术资料MF180:将某个文件夹中的某类图片导入Word

我给VBA的定义:VBA是个人小型自动化处理的有效工具。利用好了,可以大大提高自己的工作效率,而且可以提高数据的准确度。“VBA语言専攻”提供的教程一共九套,分为初级、中级、高级三大部分,教程是对VBA的系统讲解&#…

工作实战-项目压测记录

1-1-1每分钟的单量 1-1-2第二版测试 2022年5月16日 17:43:11 成功 失败 其它(nginx) 真实入库单量 总单量 52 1 447 500 2022年5月16日 19:42:18 成功 失败 其它(nginx) 真实入库单量 总单量 311 689 306 1000 2-0-1. 20线程-2000单执行结果 2-1-0. 40线…

关键点检测——HRNet源码解析篇

🍊作者简介:秃头小苏,致力于用最通俗的语言描述问题 🍊专栏推荐:深度学习网络原理与实战 🍊近期目标:写好专栏的每一篇文章 🍊支持小苏:点赞👍🏼、…

JavaEE 第18节 TCPUDP优缺点(对比)

目录 前言1、UDP(User Datagram Protocol)优点缺点 2、TCP(Transmission Control Protocol)优点缺点 3、总结 前言 基于TCP/IP协议栈,TCP和UDP属于传输层协议。在Java生态中也分别提供了相关套接字(Socket)1的API,方便网络编程。…

C++资料电子书资源PDF免费分享

C电子书 这里写目录标题 C电子书目录资源获取 目录 《数据结构(C语言版)》(严蔚敏 吴伟明编著).pdf 7.6MB 《C程序设计题解与上机指导》(第二版).谭浩强.pdf 7.0MB 《C程序设计(第四版)学习辅导》.谭浩强.扫描版.pdf 13.1MB 《C程序设计》第一版(谭浩强&#xff09…

反汇编快速定位内核OOPS

前言 简单的说,出现内核奔溃,我们可以通过串口日志提供的信息;使用gdb反汇编出问题函数所在的文件,然后使用《disassemble /m 函数名》查看具体函数的源码和汇编码;这样能直观的看到源代码对应的汇编码干了什么&#…

大数据基础:数仓架构演变

文章目录 数仓架构演变 一、传统离线大数据架构 二、​​​​​​Lambda架构 三、Kappa架构 四、​​​​​​​​​​​​​​混合架构 五、湖仓一体架构 六、流批一体架构 数仓架构演变 20世纪70年代,MIT(麻省理工)的研究员致力于研究一种优化的技术架构&…

海明码的基本原理

海明码 一、什么是海明码二、校验位的分布方式1、奇偶校验2、海明码校验位 三、检错原理四、纠错原理 一、什么是海明码 首先来看一下百度的介绍: ‌‌海明码(‌Hamming Code)‌是一种具有检错和纠错能力的编码方式,由‌理查德汉…

下载(win10-win11)微软官方ISO镜像方法

下载Win11安装镜像。 官方下载win10地址:下载 Windows 10 官方下载win11地址:Download Windows 11 下载完成后,运行 MediaCreationTool_Win11_23H2.exe 等待完成100%跳转页面后,关闭界面即可。

IDEA工具设置默认使用maven的settings.xml文件

第一步:打开idea工具,选中 File ——> New Projects Setup ——> Settings for New Projects 第二步:先设置下自动构建项目这个选项 第三步:选中 Build Tools ——> Maven,让后就可以设置自己安转的maven和se…

鸿蒙开发5.0【基于CameraKit,通过avrecorder进行录像】

1 场景描述 录像是相机应用的最重要功能之一,录像是循环帧的捕获。本文通过CameraKit自定义相机并通过avrecorder进行录像。 2 效果图 3 自定义相机录像流程图 4 方案描述 4.1 整体描述: 总体可分为:1、相机输入,2、同时输出预览流录像流…

探索全球设计灵感:六大海外设计平台

海外设计网站对于设计师而言,不仅是灵感的源泉,更是专业成长的加速器。这些平台聚集了全球创意人士,提供了一个分享和发现最新设计趋势的环境。设计师可以通过这些网站学习行业内的创新技术,参与设计挑战,提升个人设计…

基于Python的顾客购物数据可视化分析

数据可视化分析实验 数据集简介 本文在实验中考虑到实验使用设备的性能和环境的局限性,采用了kaggle官网上的的消费者购物数据集,数据地址: https://www.kaggle.com/datasets/iamsouravbanerjee/customer-shopping-trends-dataset。 此数据…

Stable Diffusion AI绘画工具的安装与配置(MAC用户)

AI绘画的热潮席卷了整个创意行业,Stable Diffusion作为其中的翘楚,让艺术创作变得前所未有的简单。然而,对于使用Mac电脑用户来说,安装和配置Stable Diffusion可能显得有些棘手。别担心,这份详细的教程将手把手教你如何…

多功能秒达工具箱全开源源码,可自部署且完全开源的中文工具箱

简介: 多功能秒达开源工具箱源码,,可自部署且完全开源的中文工具箱,永远的自由软件,轻量级运行,全平台支持(包括ARMv8),完全类似 GPT 的支持,与高效的 UI 高…

【Java】—— Java面向对象基础:编程实例(学生信息管理)

目录 场景描述 定义学生类 创建学生对象并处理需求 代码解析 总结 在Java中,面向对象编程(OOP)是一种常用的编程范式,它允许我们创建基于现实世界的模型,通过类和对象来模拟这些模型。今天,我们将通过…

刘海屏的优雅回归?华为Mate 70 Pro定义新美学

在智能手机的发展历程中,华为Mate系列一直是高端旗舰的代表。而今,华为Mate 70 Pro的神秘面纱终于揭开,其回归的刘海屏设计和独特的寰宇舷窗设计,再次将华为的设计理念推向了新的高度。 刘海屏的回归:经典与创新的融合…

后端微服务与分布式系统

编写一篇关于后端微服务和分布式系统的文档,需要详细讨论微服务架构的核心概念、优缺点、关键技术,以及在分布式系统中的应用。以下是文档的大纲和内容概述: 后端微服务与分布式系统 1. 简介 微服务架构是一种将大型应用程序分解为一系列小…

【AI绘画】Midjourney前置/imagine与单图指令详解

文章目录 💯Midjourney前置指令/imagine什么是前置指令?/imaginepromptUpscale(放大)Variations(变化)🔄(重新生成一组图片) 💯单张图片指令Upscale (细节优化)Vary(变体…

COMSOL工业碱性电解槽(3D、双欧拉模型)

本案例通过改写COMSOL官方案例获得,使用了碱性电解槽和欧拉-欧拉(湍流)模型,阳极室和阴极室带有乳突状的结构,模型进行了人为缩小,仅供参考。其中一些参数可参考如下链接文章的说明。COMSOL碱性电解槽参数解…