Python 之使用模板生成周報

使用模板生成周報的步驟:
1、使用 docx 庫編輯模板文檔
2、將段落中的關鍵詞替換成每週需要改變的參數
3、將統計內容插入表格中
4、生成統計圖並插入模板文件
5、將模板文件另外輸出

本篇博客會涉及以下幾個知識點:
1、使用 docx 依賴編輯模板文件
2、如何替換 word 文檔中的關鍵字
3、在 word 中添加圖片
4、將統計內容插入表格

本篇博客會涉及到的依賴庫:
docx

1、使用 docx 庫打開模板文檔

此步驟會涉及到 docx 安裝以及該模塊的基本使用。

安裝

直接使用以下命令進行安裝:

sudo pip3 install docx

然後打開 python 的交互交互界面,如果出現如下錯誤:
在這裏插入圖片描述
則需要使用以下命令再安裝一次:

sudo pip3 install python-docx

然後 import docx 不報錯則表示安裝成功。

docx 文檔編輯 word 文檔

在 python3 裏,docx 編輯 word 文檔,有如下幾個方法:
每一段文字都是 paragraph,每一個表格都是 table。

編輯文字
import docx
path = "e:/test.docx"
document = docx.Document(path)
paragraphs = document.paragraphs
for para in paragraphs:
    print(para.text)

這樣就打印出了每一段的文字,如果是想要替換,則是如下操作:

for para in paragraphs:
	para.text = 'test'

這樣,每一段文字都會被置換成 test 字符串,如果是想要替換某個關鍵詞,在後面的操作中會涉及。

編輯表格
tables = document.tables

對於每一個表格,要涉及的操作都是每個表格內的格子,這個在後面插入數據的地方詳細講述。
因爲本文做的是使用模板,所以只講表格內字符串的替換以及插入操作,不涉及表格的添加與刪除。

以上就是本文中涉及 docx 編輯表格需要用到的一些知識點。

2、將段落中的關鍵詞替換成每週需要改變的參數

第一個步驟後中,介紹 docx 編輯文檔,直接使用

paragraph.text = 'replace string'

替換整段文字,如果是在一個段落中,模板文件需要修改的只是每個段落中的幾個參數,那麼我們如果去修改呢?

首先,我們要了解一下,每個段落的構成。
在一個段落中,這個段落並不是一個整體,而是由一個個叫做 run的東西組成。
爲什麼一個段落會分解成一個個的 run 呢,因爲在一個段落裏,每一個字符都有可能會被單獨加上一些屬性,比如字號、字體、顏色、背景等參數。
比如在第一個段落中,文本信息爲:
在這裏插入圖片描述
逐個打印出 run 的 text 文本。
在這裏插入圖片描述

而我們通過替換每個 run 中的字符,可以保留下 run 中的這些屬性,而只替換文字內容。
比如原始本文內容爲:
在這裏插入圖片描述
以下是替換方法:

test = paragraphs[2]
for run in test.runs:
    if 'n' in run.text:
        run.text = run.text.replace("n", str(3))
    if 'hour' in run.text:
        run.text = run.text.replace("hour", str(18))

然後打印出替換後的內容:
在這裏插入圖片描述
該段落中,關鍵字部分已經被替換。

3、將統計內容插入表格中

接下來介紹一下表格的基本組成結構。
每一個 table由一個個的 cell 組成,這個特點和 Python 操作 Excel 的方式有點相似,而在每一個cell裏要添加內容,可以使用到前面的 段落paragraph 以及之下的 run。
而對於每一個 cell,計數都是從0 開始,也就是說,要定位到表格的第一個格子,是 cell(0, 0)
以下是向格子中添加內容的方法:

table = document.tables[0]
run = table.cell(0,0).paragraphs[0].add_run('this is add string')

以上代碼片段就向 table 的第一個格子添加了一段測試字符串。
如果需要將該 run 的字符設置字號大小,則使用如下代碼:

run.font.size = docx.shared.Pt(18) 

4、生成統計圖並插入模板文件

要生成報表,比如折線圖,柱狀圖,餅圖等,這個內容我會另開一篇博文,這裏只講述如果插入模板文件。
在將圖片插入模板文件的過程中,嘗試了一些方法,比如直接插入,比如插入 表格的 cell 中,這就涉及幾個問題:
如何定位圖片的插入地方,插入圖片後的排版。

如果是直接通過段落,也就是 paragraph 來定位,會有一個問題,插入圖片後顯示不全,也就是說字體與圖片的懸浮問題。
當然,直接在 word 文檔中插入也有這個問題,可以通過將段落改爲 單倍行距的方式來解決。

但是通過向 table 的 cell 中插入圖片可以一次性解決這個問題。

但是需要注意一點,就是需要將表格 table 設置爲隱藏邊框。
以下是插入圖片的方法:

run = document.tables[1].cell(0, 0).paragraphs[0].add_run()
run.add_picture(image_path, width=Inches(5.25))

其中, width 這個參數是用來設置 圖片的大小。

5、將模板文件另外輸出

通過以上的操作步驟生成一個新的週報文件以後,需要將其另外輸出到一個地址,而原有模板文件不會改變。
以下是輸出操作:

document.save(document_path)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章