python 操作word库docx 增强接口

news/2024/5/2 17:16:55/文章来源:https://blog.csdn.net/xiyangxiaoguo/article/details/129337008

前言

用python 的docx 库操作word完成一些自动化的文档生成工作,但有时候会遇到docx库提供的操作无法直接满足业务上的需求,需要对其进行一些扩展。

接口完善实现

  1. 在指定的文字后面插入指定的文字

任务:以下示例需要在文档中的所有 "人生苦短" 后面插入文字 ",我用python!",并且希望插入后的文字与插入点前面的样式保持一致。

分析:通过在段落中用paragraph.text去搜索目标字符串 "人生苦短",然后再指定位置新增加一个run,并且在该run中写入 ",我用python!"。但是需要给新增加的run赋予它前面一个run的样式。由于目标字符串 "人生苦短"的格式在段落中可能并不一致,所以还需要定位到 "人生苦短"四个字符最后一个所在的run。

实现:见demo1

下图是原始的文档样式:

下图是经过插入后的文档样式,插入的文字与插入点上一个run的格式保持了一致。

  1. 复制带样式的段落

任务:以下示例需要对文档中的一个段落进行复制,然后插入到其他指定的位置。被复制的段落里面的文字具有某些样式,希望复制之后这些样式得以保存。

分析:由于需要保持样式,显然不能直接获取到原段落的text然后重新创建一个paragraph到指定的位置。

实现:见demo2

这是复制之前的文档:

这是复制之后的文档,将源段落的内容和样式完全复制到新段落。

3.删除段落

#从文档中删除段落paragraph
def delete_paragraph(paragraph):p = paragraph._elementp.getparent().remove(p)paragraph._p = paragraph._element = None

4.插入段落

def move_paragraph_after(para1,para2):'''移动p1段落到p2段落后面'''p1,p2=para1._p,para2._pp2.addnext(p1)#在指定的段落pa前面插入段落
pa.insert_paragraph_before(text=None, style=None)#在指定的段落pa后面插入段落
def insert_paragraph_after(paragraph,text=None):'''在指定的段落后面创建段落'''para=paragraph.insert_paragraph_before(text)move_paragraph_after(para,paragraph)return para

5.插入题注与交叉引用题注

见demo3

下面是插入题注和交叉引用之前的文档:

下面是插入题注和交叉引用之后的文档

资源

本文样例的word操作接口均为本人研究docx库然后自行完善得到,基本上拿来参考可用,少量接口实现依旧不够完善,后续改进中。给有需要的同志们,共勉!

链接:https://pan.baidu.com/s/1gLGAIWSKc372uB_oz2iX2Q?pwd=ptty

提取码:ptty

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

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

相关文章

【SpringMVC】springMVC介绍

参考资料 视频资料 03_尚硅谷_SpringMVC_SpringMVC简介_哔哩哔哩_bilibili 笔记资料 第一节 SpringMVC概述 (wolai.com)链接:https://pan.baidu.com/s/1A7BX2TNfbGTpYene4x3Mew 提取码:a8d5 一、SpringMVC简介 1、什么是MVC MVC是一种软件架构的思…

js正则表达式以及元字符

0、常用的正则表达式规则 手机号 const reg /^1([38][0-9]|4[579]|5[0-3,5-9]|6[6]|7[0135678]|9[89])\d{8}$/;密码 const reg /^[a-zA-Z0-9]{6,20}$/;验证码 const reg /^\d{6}$/;1、正则表达式的介绍与使用 正则表达式(Regular Expression)是用于匹配字符串中字符组合…

用Python Flask为女朋友做一个简单的网站(附可运行的源码)

🌟所属专栏:献给榕榕🐔作者简介:rchjr——五带信管菜只因一枚😮前言:该专栏系为女友准备的,里面会不定时发一些讨好她的技术作品,感兴趣的小伙伴可以关注一下~👉文章简介…

docker安装即docker连接mysql(window)

一 安装docker 1.什么是docker Docker容器与虚拟机类似,但二者在原理上不同。容器是将操作系统层虚拟化,虚拟机则是虚拟化硬件,因此容器更具有便携性、高效地利用服务器。 2.WSL2 WSL,即Windows Subsystem on Linux,中…

【CV学习笔记】之ncnnFastDet多线程c++部署

1、前言 ncnn是一款非常高效易用的深度学习推理框架,支持各种神经网络模型,如pytorch、tensorflow、onnx等,以及多种硬件后端,如x86、arm、riscv、mips、vulkan等。 ncnn项目地址:https://github.com/Tencent/ncnn FastDet是设计…

RK3568触摸屏驱动调试总结

硬件电路分析 RK3568 CPU通过I2C与触控板外设wdt87xx连接。 首先要根据电路图获取如下I2C的信息: 项目Value接在哪个I2Ci2c1I2C 寄存器地址0x2cHID 地址0x20中断B5 1、接在哪个I2C 如图,1接在I2C1: 2、使用哪个GPIO引脚接收触控板的中断 如图&#xf…

Buuctf Younger-drive 题解

目录 一.查壳 二.运行缺少dll 三.主函数 四.hObject线程 五.Thread线程 六.judge函数 七.解题脚本 这题的关键在于了解一定的线程相关知识 一.查壳 32位带壳,用upx脱壳 二.运行缺少dll 后续尝试了各种方法修复dll但是还是运行不了 值得一提的是脱壳后的程序不能动态调试…

MySql启动错误(Mac系统 安装 mysql-8.0.32-macos13-arm64 后每次点击启动 无法启动) --- 已解决

MySql启动的时候: 立即变红! 查看日志如下: 2023-03-04T14:18:01.089671Z 0 [System] [MY-010910] [Server] /usr/local/mysql/bin/mysqld: Shutdown complete (mysqld 8.0.32) MySQL Community Server - GPL. 2023-03-04T14:18:10.304169Z 0 [System] [MY-010116] [Server]…

HiveSQL一天一个小技巧:如何精准计算非连续日期累计值【闪电快车面试题】

0 需 求稀疏字段累计求和问题1 问题分析根据图片中数据变换的形式,可以看出是根据字段term补齐数据中缺失的日期,term为连续日期的个数,当为12时,表明由2018-12-21到2019-01-02连续日期个数为12,当补齐日期后&#xff…

计算机网络的166个概念你知道几个 第四部分

HTML:HTML 称为超文本标记语言,是一种标识性的语言。它包括一系列标签.通过这些标签可以将网络上的文档格式统一,使分散的 Internet 资源连接为一个逻辑整体。HTML 文本是由 HTML 命令组成的描述性文本,HTML 命令可以说…

【LeetCode每日一题】——605.种花问题

文章目录一【题目类别】二【题目难度】三【题目编号】四【题目描述】五【题目示例】六【解题思路】七【题目提示】八【时间频度】九【代码实现】十【提交结果】一【题目类别】 贪心算法 二【题目难度】 简单 三【题目编号】 605.种花问题 四【题目描述】 假设有一个很长…

K8S 实用工具之二 - 终端 UI K9S

开篇 📜 引言: 磨刀不误砍柴工工欲善其事必先利其器 第一篇:《K8S 实用工具之一 - 如何合并多个 kubeconfig?》 像我这种,kubectl 用的不是非常溜,经常会碰到以下情况: 忘记命令,先…

BUU [ZJCTF 2019]Login

这是一道让我感觉很淦的题,整一天了才大致了解了来龙去脉 开始: 首先丢到虚拟机checksec一下看看有啥保护措施: 看到开了Canary,就已经感觉不妙了,接着丢到IDA里看看啥情况 一看,是令人痛苦的c风格的代码…

LeetCode-63. 不同路径 II

题目来源 63. 不同路径 II 递归 class Solution {public int uniquePathsWithObstacles(int[][] obstacleGrid) {int row obstacleGrid.length-1;int col obstacleGrid[0].length-1;return process(row,col,0,0,obstacleGrid);}private int process(int row ,int col,int i…

Cesium三维数据格式以及生产流程详解(glb,osgb,obj,bim,ifc)等

最近收到私信问我在cesium上展示的一些三维数据是如何生产和处理的,这篇文章就给大家一次性讲个透彻。 首先我们来做做分类。市面上能接触到的,常见的,cesium上支持展示的三维数据大致分为以下几种: 1.倾斜摄影(osgb,obj) 2.点云数据(las,pts) 3.手工模型(gltf,…

【SpringCloud】SpringCloud详解之Eureka实战

目录前言SpringCloud Eureka 注册中心一.服务提供者和服务消费者二.需求三.搭建Eureka-Server四.搭建Eureka-Client(在服务提供者配置:用户订单)前言 微服务中多个服务,想要调用,怎么找到对应的服务呢? 这里有组件的讲解 → SpringCloud组件…

跳表--C++实现

目录 作者有话说 为何要学习跳表?为了快,为了更快,为了折磨自己..... 跳表作用场景 1.不少公司自己会设计哈希表,如果解决哈希冲突是不可避免的事情。通常情况下会使用链址,很好理解,当有冲突产生时&#…

RTOS中信号量的实现与应用

RTOS中的信号量是一种用来协调多个任务间共享资源访问的同步机制。它可以保证多个任务之间访问共享资源的正确性和一致性,避免了因多任务并发访问造成的不可预期的问题。 信号量的实现 信号量的实现原理比较简单,主要包括两个部分:计数器和…

十大经典排序算法【快速了解】

文章目录一、算法分类二、经典排序算法总览三、算法复杂度四、代码实现一、算法分类 十种常见排序算法可以分为两大类: 比较类排序: 通过比较来决定元素间的相对次序由于其时间复杂度不能突破O(nlogn),因此也称为非线性时间比较类排序。 非…

22. linux系统基础

递归遍历指定文件下所有的文件,而且你还可以统计一下普通文件的总个数,既然能统计普通文件,能统计其他文件吗?比如目录文件, 这个是main函数里面我们调用了 ,这个checkdird这个函数,需要传递一个…