使用python-docx在word文檔中查找書(shū)簽,并在書(shū)簽處寫(xiě)入數(shù)據(jù)方式
更新時(shí)間:2024年09月11日 16:17:37 作者:hooyying
使用python-docx庫(kù),可在Word文檔中查找書(shū)簽并寫(xiě)入數(shù)據(jù)。首先打開(kāi)文檔,通過(guò)bookmarks屬性獲取書(shū)簽對(duì)象,然后使用書(shū)簽名定位書(shū)簽位置,最后將數(shù)據(jù)寫(xiě)入書(shū)簽處。這種方法適合自動(dòng)化填充Word模板等場(chǎng)景
使用python-docx在word文檔中查找書(shū)簽,并在書(shū)簽處寫(xiě)入數(shù)據(jù)
來(lái)看實(shí)例
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): """查找標(biāo)簽的起始位置(所在的段落)""" 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類(lèi)型,返回2') return 2 else: print(type(par)) #return par, bookmark.get(qn('w:id')) return par print('沒(méi)找到書(shū)簽,返回1') return 1
#查找書(shū)簽的結(jié)束位置(所在的段落) 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('未到書(shū)簽或類(lèi)型錯(cuò)誤') return bookmark_par_parent = bookmark_par.getparent() #獲得書(shū)簽索引 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)
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
對(duì)numpy 數(shù)組和矩陣的乘法的進(jìn)一步理解
下面小編就為大家分享一篇對(duì)numpy 數(shù)組和矩陣的乘法的進(jìn)一步理解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-04-04python神經(jīng)網(wǎng)絡(luò)MobileNet模型的復(fù)現(xiàn)詳解
這篇文章主要為大家介紹了python神經(jīng)網(wǎng)絡(luò)MobileNet模型的復(fù)現(xiàn)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-05-05Pytorch寫(xiě)數(shù)字識(shí)別LeNet模型
這篇文章主要介紹了Pytorch寫(xiě)數(shù)字識(shí)別LeNet模型,LeNet-5是一個(gè)較簡(jiǎn)單的卷積神經(jīng)網(wǎng)絡(luò),??LeNet-5?這個(gè)網(wǎng)絡(luò)雖然很小,但是它包含了深度學(xué)習(xí)的基本模塊:卷積層,池化層,全連接層。是其他深度學(xué)習(xí)模型的基礎(chǔ),?這里我們對(duì)LeNet-5進(jìn)行深入分析,需要的朋友可以參考下2022-01-01Python隨機(jī)數(shù)用法實(shí)例詳解【基于random模塊】
這篇文章主要介紹了Python隨機(jī)數(shù)用法,結(jié)合實(shí)例形式分析了基于random模塊的各種隨機(jī)數(shù)操作常用技巧,需要的朋友可以參考下2017-04-04pandas讀取中文xlsx文件出現(xiàn)的問(wèn)題
這篇文章主要介紹了pandas讀取中文xlsx文件出現(xiàn)的問(wèn)題及解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-05-05