最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python-docx讀取模板文檔并填充數(shù)據(jù)

 更新時(shí)間:2024年11月12日 09:56:43   作者:十連滿潛  
python-docx?是開(kāi)源的一個(gè)?Python?庫(kù),用于讀取、創(chuàng)建和更新Microsoft?Word?2007+(.docx)文件,下面我們就來(lái)看看如何利用python-docx讀取模板文檔并填充數(shù)據(jù)吧

簡(jiǎn)介

python-docx 是開(kāi)源的一個(gè) Python 庫(kù),用于讀取、創(chuàng)建和更新Microsoft Word 2007+(.docx)文件。目前最新版本是1.1.2。

官方文檔地址:python-docx.readthedocs.io/en/latest/

其開(kāi)源倉(cāng)庫(kù)地址:github.com/python-openxml/python-docx

準(zhǔn)備docx文檔

docx 文檔可以用 office 打開(kāi),也可以用 WPS,這邊截圖使用的是 WPS,因?yàn)槔锩驵]件合并部分 “插入合并域/Next域” 自帶的小書名號(hào)非常獨(dú)特,這個(gè)符號(hào)的正式名稱是角引號(hào),主要用于法語(yǔ)、俄語(yǔ)、西班牙語(yǔ)等歐洲語(yǔ)言中,中文語(yǔ)境里使用較少,很適合作為后面遍歷行段內(nèi)容替換字符串時(shí)的標(biāo)識(shí)符。

在 “插入域” 彈窗的選項(xiàng)中選擇域名為 “唯一標(biāo)識(shí)符” 的選項(xiàng)插入,先前鼠標(biāo)定位的位置就會(huì)添加上這個(gè)小書名號(hào)包裹的 “唯一標(biāo)識(shí)符”。

只要插入了一個(gè)標(biāo)識(shí)符,剩下的就可以復(fù)制粘貼了。角引號(hào)里面的內(nèi)容也可以改成自己想要的字段名稱,中英文不限。

像下面的示例表格,便是直接從前面這個(gè)唯一標(biāo)識(shí)符復(fù)制過(guò)來(lái)的。復(fù)制時(shí)記得把角引號(hào)包裹住了。WPS里面鼠標(biāo)點(diǎn)擊標(biāo)識(shí)符時(shí)會(huì)自動(dòng)出現(xiàn)截圖中的深色區(qū)域,很方便檢查。

不過(guò)這個(gè)郵件合并域功能目前我只在 WPS 的 “引用” 模塊里有找到,在 office 的 Word 里沒(méi)有找到對(duì)應(yīng)的地方。雖然 “插入” 里可以選擇 “域”,但操作起來(lái)容易出錯(cuò),我自己就沒(méi)看懂應(yīng)該選哪個(gè)去插入……

python代碼

前面特地添加一個(gè)表格做示例,主要是因?yàn)楂@取文檔內(nèi)容時(shí),表格需要單獨(dú)的遍歷。

from docx import Document

def merge_docx(doc, data):
    '''
    替換文檔里各個(gè)占位符,替換后保存
    :param data: 數(shù)據(jù)data = { '這句話的英文': 'Hello World!','這句話的加粗版本': 'Hello World!' }
    :return:
    '''
    # 遍歷文檔中的所有段落
    for para in doc.paragraphs:
        # 替換每個(gè)自定義合并域
        for key, value in data.items():
            if f"?{key}?" in para.text:
                para.text = para.text.replace(f"?{key}?", value)

    # 遍歷文檔中的所有表格,再遍歷單元格內(nèi)段落
    for table in doc.tables:
        for row in table.rows:
            for cell in row.cells:
                cell_text = cell.paragraphs[0].text
                if cell_text[1:-1] in data.keys():
                    key = cell_text[1:-1]
                    val = data[key] # cell.text.replace(f"?{key}?", data[key])
                    pa = cell.paragraphs[0]
                    pa.clear()
                    r = pa.add_run(val)
                    r.bold = True # 加粗需要在run級(jí)別設(shè)置


data={ '這句話的英文': 'Hello World!','這句話的加粗版本': 'Hello World!' }
doc=Document('test.docx')
merge_docx(doc,data)
doc.save('result.docx')

執(zhí)行完畢,文檔成功生成,里面的內(nèi)容也成功替換,如下圖:

docx轉(zhuǎn)pdf

有時(shí)候,文檔需要轉(zhuǎn)換成 PDF 格式,python-docx 缺少相應(yīng)的工具,因此只能尋求其他工具,比如 win32com,恰好,win32com 可以調(diào)用到辦公軟件里的 wdExportFormatPDF 方法,用來(lái)將文件導(dǎo)出成pdf。

這個(gè)方法在 office 和 WPS 里都有存在,WPS 的 WebOffice 文檔 可以做參考。

Office 官方的文檔也可以看看。

image.png

兩個(gè)軟件的可用方法還是有區(qū)別的,只是恰好在導(dǎo)出成PDF這方面是一致。體現(xiàn)在代碼中,最主要的便只剩下的調(diào)用的底層辦公軟件對(duì)象。

import win32com, pythoncom
from win32com.client import constants, gencache

def word2pdf(word_path):
    pdf_path = word_path.replace(".docx", ".pdf")
    pythoncom.CoInitialize()
    wc = win32com.client.constants
    # 下面這個(gè)地方,WPS 就用 kwps.application ,Office就用 word.application
    wps = gencache.EnsureDispatch("kwps.application")
    doc = wps.Documents.Open(word_path, ReadOnly=1)
    doc.SaveAs2(FileName=pdf_path, FileFormat=wc.wdExportFormatPDF)
    wps.Documents.Close(wc.wdDoNotSaveChanges)
    wps.Documents.Close()
    wps.Quit()

word2pdf('result.docx')

執(zhí)行完畢,文件成功導(dǎo)出。任務(wù)完成。

到此這篇關(guān)于python-docx讀取模板文檔并填充數(shù)據(jù)的文章就介紹到這了,更多相關(guān)python-docx讀取模板文檔內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • python爬蟲框架scrapy實(shí)現(xiàn)模擬登錄操作示例

    python爬蟲框架scrapy實(shí)現(xiàn)模擬登錄操作示例

    這篇文章主要介紹了python爬蟲框架scrapy實(shí)現(xiàn)模擬登錄操作,結(jié)合實(shí)例形式分析了scrapy框架實(shí)現(xiàn)模擬登陸操作的步驟、相關(guān)實(shí)現(xiàn)技巧與注意事項(xiàng),需要的朋友可以參考下
    2018-08-08
  • 如何將json數(shù)據(jù)轉(zhuǎn)換為python數(shù)據(jù)

    如何將json數(shù)據(jù)轉(zhuǎn)換為python數(shù)據(jù)

    這篇文章主要介紹了如何將json數(shù)據(jù)轉(zhuǎn)換為python數(shù)據(jù),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-09-09
  • Python利用requests模塊下載圖片實(shí)例代碼

    Python利用requests模塊下載圖片實(shí)例代碼

    這篇文章主要給大家介紹了關(guān)于Python利用requests模塊下載圖片的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Python具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08
  • Python實(shí)戰(zhàn)之整蠱神器合集加速友盡

    Python實(shí)戰(zhàn)之整蠱神器合集加速友盡

    讀萬(wàn)卷書不如行萬(wàn)里路,學(xué)的扎不扎實(shí)要通過(guò)實(shí)戰(zhàn)才能看出來(lái),本篇文章手把手帶用python來(lái)做幾個(gè)整蠱的小程序,大家可以在過(guò)程中查缺補(bǔ)漏,看看自己掌握程度怎么樣,發(fā)給朋友加固一下友誼
    2021-10-10
  • python matplotlib實(shí)現(xiàn)雙Y軸的實(shí)例

    python matplotlib實(shí)現(xiàn)雙Y軸的實(shí)例

    今天小編就為大家分享一篇python matplotlib實(shí)現(xiàn)雙Y軸的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-02-02
  • matplotlib bar()實(shí)現(xiàn)百分比堆積柱狀圖

    matplotlib bar()實(shí)現(xiàn)百分比堆積柱狀圖

    這篇文章主要介紹了matplotlib bar()實(shí)現(xiàn)百分比堆積柱狀圖,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-02-02
  • Python項(xiàng)目管理的利器Poetry的使用

    Python項(xiàng)目管理的利器Poetry的使用

    在?Python?項(xiàng)目開(kāi)發(fā)中,包管理、依賴管理和虛擬環(huán)境的創(chuàng)建一直是開(kāi)發(fā)者們經(jīng)常面對(duì)的難題,本文主要介紹了Python項(xiàng)目管理的利器Poetry的使用,具有一定的參考價(jià)值,感興趣的可以了解一下
    2025-04-04
  • Python實(shí)現(xiàn)項(xiàng)目打包部署Linux服務(wù)器運(yùn)行方式

    Python實(shí)現(xiàn)項(xiàng)目打包部署Linux服務(wù)器運(yùn)行方式

    文章主要介紹了Python項(xiàng)目的打包和部署,包括使用buildout打包和docker容器化部署,打包可生成exe文件或安裝包,部署可直接部署或使用docker,文中詳細(xì)介紹了每個(gè)步驟的實(shí)現(xiàn)方法和相關(guān)命令
    2026-04-04
  • python語(yǔ)法之語(yǔ)言元素和分支循環(huán)結(jié)構(gòu)詳解

    python語(yǔ)法之語(yǔ)言元素和分支循環(huán)結(jié)構(gòu)詳解

    這篇文章主要介紹了Python的語(yǔ)言元素和分支循環(huán)結(jié)構(gòu),本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-10-10
  • Python?中的?list、tuple、set、dict的底層實(shí)現(xiàn)小結(jié)

    Python?中的?list、tuple、set、dict的底層實(shí)現(xiàn)小結(jié)

    本文詳細(xì)介紹了Python中四種常用數(shù)據(jù)結(jié)構(gòu)——list、tuple、set和dict的底層實(shí)現(xiàn),包括它們的存儲(chǔ)方式、性能特點(diǎn)以及適用場(chǎng)景,感興趣的朋友一起看看吧
    2025-03-03

最新評(píng)論

东兰县| 新宾| 云梦县| 韶关市| 衡水市| 都江堰市| 九寨沟县| 当涂县| 翁牛特旗| 尉犁县| 安达市| 栾川县| 常州市| 自治县| 茶陵县| 衢州市| 台湾省| 武城县| 刚察县| 吴川市| 汨罗市| 蒲城县| 滦南县| 河西区| 车致| 土默特右旗| 潜山县| 凤阳县| 阜宁县| 西平县| 永修县| 巴东县| 黄冈市| 日照市| 拜泉县| 平遥县| 肃北| 莎车县| 遂宁市| 建始县| 霸州市|