用docxtpl庫實現docx報告自動化輸出

Gandedong發表於2021-09-08

對於很多審計人員來說,加班做底稿是常有的事,但最麻煩的不是做底稿,而是修改報告。
一般來說,一份報表對應一份審計報告,如果報表的某個數字改了,那麼整張報表的數字都會變化,那麼整份報告的所有數字都要重新修改。
當年技術有限,沒有辦法,只能慢慢改。
現在終於學會了,但卻不當審計了。
寫了一個小程式,希望可以幫到新人吧。
這是一個比較冷門的Python庫,而且庫中的函式也不多,才幾個,但功能卻不錯,如果結合Pandas庫,可以將Excel表格上的資料自動轉化成word的標籤。如果說docx庫的強大在於生成我們想要的Word文件,那麼Docxtpl庫的存在就是將這些文件按固定格式輸出。
安裝方式如下:

pip install docxtpl

安裝成功後,不代表馬上就能使用,輸入程式碼前需要設定word模板的標籤。
什麼是Word模板?其實就是一個word檔案,只是這個檔案有點特別:

Word文件內的雙括號就是標籤,它是一個變數,可以是張三,也可以是李四。標籤只能在同一段落的同一段內使用,不能跨多個段落、表格行、段使用。並且在雙括號兩邊各留下一個空格。
設定好標籤之後,再去設定Excel文件的每一列:


每一列的表頭都要與Word文件標籤的名稱要一致。只有這樣,Excel中的資料才可以通過標籤,將表頭下的內容放置在Word中的正確位置。
當Word和Excel都設定好之後,我們再去錄入程式碼:

    import pandas as pd
    from docxtpl import DocxTemplate
    df01=pd.read_excel("匯入資料.xlsx")            #匯入表格,偏碼為簡體
    df02 = df01.to_dict(orient="records")           ##資料轉化成字典
    for i in df02:
            tpl = DocxTemplate('內審報告模板03.docx')  ##匯入Word文件
            tpl.render(i)                       ##將字典替換Word標籤
            tpl.save(i['公司名稱']+'.docx')     ##按公司儲存Word文件

程式碼非常簡單,正確來說,只有三個函式:
DocxTemplate()函式的功能是匯入Word文件,如果不在相同資料夾下,就輸入絕對路徑。其次.render()函式的功能是將Word標籤替換。最後.save()函式就是生成好幾個word文件。




如果將Word文件設計得精細一點,將標籤設計得再詳細點:

那麼就會生成一份更詳細的報告。

這對於很多因為趕報告而要加班的人士來說,這種的小程式大大節省了時間,只要事前搞好了模板以及資料,就可以一鍵生成報告。
除了自動生成報告,也可以自動生成工資單。試想一下,如果將工資明細匯入到Word文件,執行後將自動生成每個人的工資單。那麼會計就不用每月都要拿著剪刀將工資表剪成一條一條,而是直接將各個人的工資單分別傳送到每個人的微訊號就可以了。
如果是學校的話,也可以自動生成錄取通知書之類的。只要做好Excel表,就可以按名單生成各人的錄取通知書。

本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章