🌎
Go! Raymond
LinkedinGithub
  • 🤚Welcome!
  • 👨‍💻About Me
  • 🗒️Blog
    • Not just a technical blog
    • First Working Day After Leaving Trading Floor
  • 🇻🇳Work/Life in Saigon
    • Life in Saigon
      • 🪙胡志明市最佳換匯場所
      • 🥜五郡安東市場 | 伴手禮堅果類
      • 💸越南什麼東西便宜?
      • ☕胡志明工作咖啡廳
    • VN Market
      • 📒Vietnam Stock Market 101
      • 📈Major Equity Index
      • Market Research
        • 越南盾VND長期貶勢
  • 💻Technology
    • Data
      • Business Intelligence Platform
        • 📈Streamlit
          • Install and Create a Streamlit Project
      • 💾Storage | Database
        • How to install MySQL on your computer with Docker?
    • Docker
      • Docker Basic
    • Python
      • Speed up Python
        • Asynchronous
      • Clean Code in Python
        • 命名(Naming)
        • 寫法
    • Web Development
      • FastAPI
        • 建立API
        • 回傳HTML
      • RESTful API是什麼?
    • Office Automation
      • Word Template with Python
    • Task Automation
      • Rocketry
        • Example of historical stock price update (Rocketry)
      • Prefect
    • 💻How to build your own VPN server?
  • 🚀Startup
    • Y Combinator - Startup School
      • Should You Start A Startup?
  • 🌎Travel
    • 🏔️Himalaya, Nepal
      • 🗒️How to apply Nepal travel visa as Taiwanese?
      • 🏔️Annapurna Circuit Trek (ACT)
        • 🎒Equipments checklist
Powered by GitBook
On this page
  • Python-docx-template
  • 1. 安裝
  • 2. Word文件範本建立
  • 3. 撰寫與執行Python主程式
  • 補充:利用For迴圈建立多個表格
  1. Technology
  2. Office Automation

Word Template with Python

PreviousOffice AutomationNextTask Automation

Last updated 1 year ago

相信在大家的工作生涯當中,在一般的辦公室中最常用到的三寶應該就是Word、Excel與PowerPoint吧?像我過去在金融業,常常相關文件與簽呈等內容都必須使用Word來處理格式,以符合老人們喜歡的八股模式,相當多是需要人工排版再複製貼上,不同部門中這種重複枯燥的工作的比重不同,通常比重高的部門的可取代性高且人員素質較低,我曾經看過一整個部門都在做這種工作......,從業人員的科技技能真的應該增加。

Python-docx-template

大家比較常看到的是python-doc,python-doc可以透過Python從零到一地建立並編寫一份Word文件,由上而下線性的建立起來,但不免的到時候某些東西還是需要人工調整,所以我必較少使用python-doc。

取而代之的是透過人工建立文件格式後,在Word文件中放入變數,到時候使用Python與Jinja2來渲染這份文件反而是更為方便直覺的,尤其像金融業有相當多既有格式的文件,這時候就不需要重新刻一個,只需要將相關參數的位置留好即可。

1. 安裝

pip install docxtpl

2. Word文件範本建立

首先我們先建立一個Word文件,並將你需要的格式先建立完成,之後我就會從這個版型做為模組帶入參數或延伸。

接下來就可以將我們要的變數利用Jinja2的語法插入,像是下圖中,利用兩組大括弧包起來,裡面放數變數名稱。

3. 撰寫與執行Python主程式

main.py
from docxtpl import DocxTemplate

doc  = DocxTemplate("WarrantTemplate.docx")

context = {'warrant_name': '888888',
           'underlying': '2330',
           'warrant_type': 'Call',
           'execution_type': 'European',
           'method': 'Cash Payment',
           'Duration': '10 months',
           'conversion_ratio': '10',
           'total_number': 1000000,
           'listing_date': '2023/10/01 ~ 2023/12/31'}

doc.render(context)
doc.save('Warrant01.docx')

執行以上程式後就可以看到在相對目錄下產生了一個Warrant01.docx的檔案,打開來看就是已經將變數導入Word文件後的成品了,是不是很簡單呢?

補充:利用For迴圈建立多個表格

常常我們要輸出的東西絕對不止一個表格,而是可能從資料庫中抓取出來的一大堆參數,這時候就可以利用Jinja2的迴圈來一次產出多個表格。

可以看到在表格的上下多了幾行,我想要一次產生十次一樣內容的表格,就可以直接加上這幾行,實際使用上則可以建立一個dict丟回context,透過一層一層的拆解,就可以批次產生囉!

實際狀況就像是這樣,是不是非常簡單且直覺呢?想查看完整的功能請自行查找。

💻
python-docx-template官方文件
WarrantTemplate.docx
WarrantTemplate.docx
Warrant01.docx
WarrantTemplate.docx
Warrant02.docx