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. elementbookmarks_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 parprint ( '没找到书签,返回1' ) return 1
def get_bookmark_par_element_end ( document, bookmark_id) : doc_element = document. part. elementbookmarks_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 parreturn 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)