使用python-docx在word文档中查找书签,并在书签处写入数据方式

 更新时间:2024年09月11日 16:17:37   作者:hooyying  
使用python-docx库,可在Word文档中查找书签并写入数据。首先打开文档,通过bookmarks属性获取书签对象,然后使用书签名定位书签位置,最后将数据写入书签处。这种方法适合自动化填充Word模板等场景

使用python-docx在word文档中查找书签,并在书签处写入数据

来看实例

from docx import Document,oxml
from docx.oxml.shared import qn
from docx.text.paragraph import Paragraph
from docx.oxml import OxmlElement
def get_bookmark_par_element_start(document, bookmark_name):
    """查找标签的起始位置(所在的段落)"""
    doc_element = document.part.element
    bookmarks_list = doc_element.findall('.//' + qn('w:bookmarkStart'))
    for bookmark in bookmarks_list:
        name = bookmark.get(qn('w:name'))
        if name == bookmark_name:
            par = bookmark.getparent()
            if not isinstance(par, oxml.CT_P):
                print('par不是CT_P类型,返回2')
                return 2
            else:
                print(type(par))
                #return par, bookmark.get(qn('w:id'))
                return par
    print('没找到书签,返回1')
    return 1
#查找书签的结束位置(所在的段落)
def get_bookmark_par_element_end(document, bookmark_id):
    doc_element = document.part.element
    bookmarks_list = doc_element.findall('.//' + qn('w:bookmarkEnd'))
    for bookmark in bookmarks_list:
        name = bookmark.get(qn('w:id'))
        if name == bookmark_id:
            par = bookmark.getparent()
            if not isinstance(par,oxml.CT_P):
                return 2
            else:
                return par
    return 1
def insert_paragraph_after(paragraph, text=""):
    """在paragraph后添加新的段落"""
    new_p = OxmlElement("w:p")
    paragraph._p.addnext(new_p)
    new_para = Paragraph(new_p, paragraph._parent)
    print(new_para)
    print(text)
    new_para.add_run(text)
    return new_para
def set_bookmark_values(document, bookmark_name, text_list: list):
    """
    :param document:
    :param bookmark_name:
    :param text_list: 待添加的文本列表
    :return:
    """
    bookmark_par = get_bookmark_par_element_start(document, bookmark_name)
    if bookmark_par == 1 or bookmark_par==2:
        print('未到书签或类型错误')
        return
    bookmark_par_parent = bookmark_par.getparent()
    #获得书签索引
    index = bookmark_par_parent.index(bookmark_par)
    for _i, _text in enumerate(text_list):
        base_paragraphs = document.paragraphs[index + _i]
        result_with_space = " ".join(_text)
        insert_paragraph_after(base_paragraphs, result_with_space)

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 采用Psyco实现python执行速度提高到与编译语言一样的水平

    采用Psyco实现python执行速度提高到与编译语言一样的水平

    这篇文章主要介绍了采用Psyco实现python执行速度提高到与编译语言一样的水平的方法,是非常实用的Python第三方库,需要的朋友可以参考下
    2014-10-10
  • python设置值及NaN值处理方法

    python设置值及NaN值处理方法

    今天小编就为大家分享一篇python设置值及NaN值处理方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-07-07
  • Pytorch实现神经网络的分类方式

    Pytorch实现神经网络的分类方式

    今天小编就为大家分享一篇Pytorch实现神经网络的分类方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-01-01
  • 使用python-magic和wxPython实现识别文档类型

    使用python-magic和wxPython实现识别文档类型

    这篇文章主要介绍了如何使用python-magic模块和wxPython库创建一个简单的文件列表应用程序,该应用程序可以显示所选文件夹中文件的类型,需要的可以参考下
    2023-08-08
  • Python中的线程同步的常用方法总结

    Python中的线程同步的常用方法总结

    在Python多线程编程中,我们常常需要处理多个线程同时访问共享数据的情况,为了防止数据在多线程之间出现冲突,我们需要对线程进行同步。本文将详细介绍Python中的线程同步的几种常用方法,需要的朋友可以参考下
    2023-06-06
  • 利用django创建一个简易的博客网站的示例

    利用django创建一个简易的博客网站的示例

    这篇文章主要介绍了利用django创建一个简易的博客网站的示例,帮助大家更好的学习和使用django框架,感兴趣的朋友可以了解下
    2020-09-09
  • Python使用Selenium模拟浏览器自动操作功能

    Python使用Selenium模拟浏览器自动操作功能

    这篇文章主要介绍了Python使用Selenium模拟浏览器自动操作功能,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-09-09
  • Python利用reportlab实现制作pdf报告

    Python利用reportlab实现制作pdf报告

    这篇文章主要为大家详细介绍了reportlab生成流文件格式、reportlab分页和图片流文件写入reportlab等内容,文中的示例代码讲解详细,感兴趣的小伙伴可以了解一下
    2022-12-12
  • python中前缀运算符 *和 **的用法示例详解

    python中前缀运算符 *和 **的用法示例详解

    这篇文章主要介绍了python中前缀运算符 *和 **的用法,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2020-05-05
  • Python 实现一个计时器

    Python 实现一个计时器

    这篇文章主要介绍了Python 实现一个计时器的方法,文中讲解非常细致,代码帮助大家更好的理解和学习,感兴趣的朋友可以了解下
    2020-07-07

最新评论