唔少公司每個月都要出同一款文件:人事部出 offer letter、補習社出學員證書、保險或地產經紀出客戶通知信、財務出月結單。格式一模一樣,淨係換咗個名、日期、金額同編號。人手做法係開住份 Word 範本,Copy 一次、貼一次、改一次,出十份已經手軟,出一百份仲一定會打錯字。
其實呢種「範本加換資料」嘅工作,正是 Python 最擅長嘅事。用一個叫 python-docx 嘅套件,你可以叫 Python 讀住你嘅 Word 範本,自動將資料填入去,再逐份儲存——一百份文件幾秒鐘搞掂,而且零錯字。今次就由零開始,教你砌一個批量出文件嘅小工具。
第一步:準備一份「有窿」嘅範本
做法好簡單:先喺 Word 整一份正常文件,喺要換資料嘅位置,用大括號寫住「佔位符」。例如:
- 親愛嘅
{{name}}先生/小姐: - 你嘅申請編號係
{{ref}},已於{{date}}獲批。 - 每月費用:HK$
{{amount}}。
呢啲 {{...}} 就係「窿」,等下由 Python 逐個填入去。存檔做 template.docx,放喺 script 隔籬。
第二步:用 python-docx 填窿
先喺終端機安裝套件:
跟住係主角——讀範本、換資料、存檔嘅核心十幾行:
短短十幾行,就做到「開範本、填資料、儲存」。幾個重點解釋:
- paragraphs 係文件入面每一個段落,Python 逐個行去檢查。
- runs 係段落入面每一小段文字(同一段可能因為格式唔同而被切開)。要喺 runs 層面替換,先唔會整亂原本嘅字體同粗體。
- doc.save() 將改好嘅文件另存新檔,原本嘅範本保持乾淨。
第三步:一次過出幾百份
上面只係出一個客。真正慳時間嘅位,係將資料放喺一張 Excel 表,叫 Python 逐行讀、逐行出文件:
一百個客,只要跑一次 script,output 資料夾就自動出現一百份填好嘅通知信,每份檔名都跟住個客名。之前要人手做半日嘅工作,變成幾秒鐘。
同 Word 合併列印有咩分別?
Word 本身有「合併列印」(Mail Merge),一樣做到範本加名單。但佢限制多:資料一定要係 Word 指定嘅格式、每次都要人手開 Word 撳幾個步驟、亦好難自動定時跑。用 Python 就自由得多——資料可以嚟自 Excel、CSV、資料庫、甚至網站 API,仲可以配合之前提過嘅定時排程,夜晚自動出好晒,第二朝同事返嚟直接攞文件。
進階小技巧
- 表格一樣填得到:如果佔位符喺表格入面,用
doc.tables逐個表格、再逐格去搵,方法同上。 - 自動轉 PDF:裝
docx2pdf或者用 Word 本身嘅轉換功能,批量將 .docx 轉做 PDF,方便直接寄俾客。 - 日期自動更新:用 Python 嘅
datetime攞今日日期填入去,就唔使自己記住改。 - 出證書/獎狀:同一套做法,將學員名同課程名填入範本,一次過出晒幾百張。
總結
Python 教學:凡是「同一份格式、只換幾個字」嘅文件工作,都係 Python 嘅天下。唔使寫複雜程式,記住兩個概念就得:喺 Word 範本用 {{佔位符}} 留窿,再用 python-docx 逐段逐 run 替換。資料來源無論係手寫、Excel 定資料庫,只要轉成一張表,就可以一鍵出幾百份文件,快、準、零錯字。下次再有人叫你「改一百份信」,你就唔使再坐低逐份 Copy 喇。