通过书签替换word文档中的内容

1、导入所需的库

from docx import Document,oxml
from docx.oxml.shared import qn
from docx.text.paragraph import Paragraph
from docx.oxml import OxmlElement

2、 查找书签的开始位置

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):
                return 2
            else:
                return par
    return 1

3、 替换内容

def replace_paragraph(paragraph, key, value):
    if key in paragraph.text:
        for run in paragraph.runs:
            run.text = run.text.replace(key, value)

4、调用方法

 def set_bookmark_values(document, text_dic, start, end):
    """
    :param document:
    :param bookmark_name:
    :param text_list: 待添加的文本列表
    :return:
    """
    #获得书签索引
    for key, value in text_dic.items():
        bookmark_par = get_bookmark_par_element_start(document, key,)
        if bookmark_par == 1 or bookmark_par==2:
            print('未到书签或类型错误')
            return
        bookmark_par_parent = bookmark_par.getparent()
        index = bookmark_par_parent.index(bookmark_par)
        base_paragraphs = document.paragraphs[index]
        print(index, ':',base_paragraphs.text)
        replace_paragraph(base_paragraphs, key, value)

import time
start =time.perf_counter()

document = Document(r'your path')
text_dic = {
    'project_name': 'AAA',
    'bracket_num': 'bbb'
}
set_bookmark_values(document, text_dic)
document.save(r'your path')
end = time.perf_counter()
print('Running time: %s Seconds'%(end-start)) #计算程序的开始和结束时间

文章参考了不同博主的内容进行修改的,但是参考人较多,已经记不清,这里就不一一例举了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值