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

python 操作word库docx 增强接口

前言

用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.lryc.cn/news/28887.html

相关文章:

  • ARM uboot 源码分析9 - uboot的硬件驱动部分
  • Mybatis动态sql语句foreach中拼接正则表达式字符串注意事项
  • JVM内置锁synchronized关键字详解
  • 【2021.12.25】xv6系统入门学习
  • Linux内核4.14版本——drm框架分析(4)——crtc分析
  • 用原生js手写分页功能
  • CornerNet介绍
  • 【SpringBoot】日志使用
  • 关于slice扩容性能损耗的探究
  • Java实现单向链表
  • 3月4日,30秒知全网,精选7个热点
  • EXCEL-职业版本(2)
  • java中延时队列的实现
  • 基于java的circle buffer的实现
  • 通用方法——为什么重写equals还要重写hashcode
  • JavaSE学习进阶day2_01 包和权限修饰符
  • Android性能调优 - 省电优化
  • ElasticSearch - SpringBoot整合ES之全文搜索匹配查询 match
  • 句子的改写和扩写
  • DockerFile创建及案例
  • 第十四届蓝桥杯三月真题刷题训练——第 1 天
  • 基于容器云提交spark job任务
  • Linux系统调用之目录操作函数
  • 设计模式-策略模式
  • 面试+算法:罗马数字及Excel列名与数字互相转换
  • Connext DDS路由服务Routing Service(1)
  • 如何使用SaleSmartly进行Facebook Messenger 营销、销售和支持
  • 教资教育知识与能力中学教学
  • IDEA中使用Tomcat的两种方式:集成本地Tomcat使用Tomcat Maven插件
  • IP 地址的简介