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)) #计算程序的开始和结束时间
文章参考了不同博主的内容进行修改的,但是参考人较多,已经记不清,这里就不一一例举了。