工程招標文件線上套印作法
前言
公部門工程案要上網招標之前都會需要製作招標文件及投標表單,其內容包含:
招標文件
- 工程採購契約
- 投標須知
投標表單
- 標單
- 標封
- 投標文件審查表
- 退還押標金申請單
- 押標金查詢同意書
- 使用印章授權書
- 投標廠商聲明書
- 投標切結書
- 身分揭露表
既有作法是利用WordVBA搭配Excel內容套印,但若招標文件有版本更迭時,需要將每個同仁的檔案進行更換才能進行正確的內容輸出,這對於版本控管有相當大的難度。
為了減少版本更迭的問題,目前設計直接將最新的內容推送到伺服器位置,前端則利用網頁進行資料填寫,自此就能夠及時輸出最正確的資料,希望透過這樣的設計能夠減少招標文件產製的版本疏漏。
概略作法
- 儲存預計要取代的文字內容及標籤名稱。
- 將範本word複製一份出來進行修改。
- 檢查word中是否有標籤名稱。
- 如果有找到,將標籤名稱進行取代後輸出。
- 輸出內容打包成ZIP,讓使用者下載使用。
必要知識點
- Streamlit
- python-docx
操作網頁
標籤
目前的實作用 %% 當作標籤的偵測點,演算過程會針對整個段落進行,偵測到後才會將標籤名稱進行文字取代。

多執行緒
以前是使用 Word VBA 進行檔案的處理,礙於VBA為單執行緒的處理,即便CPU有很多顆,但他一次只能夠處理一份文件,沒有辦法發揮多顆CPU的效果,導致文件在生成過程都會需要排隊,消耗不少時間。
Python可以藉由多執行緒的演算法來同時併發檔案的處理,讓整體產製招標文件過程時間下降,甚至瞬間就完成,對於時間相當寶貴的現代來說相當有幫助!
1 | import concurrent.futures |
- 本篇為採用Streamlit,仍然屬於單執行緒的並不原生支持多執行緒,上方範例程式碼僅說明python有支持多執行緒的撰寫方式,於DOS指令上可以發揮其效果。
後續發展
目前的介面仍賴於使用者進行資料填寫後點選按鈕輸出,然而身為一名程式設計師,要填寫的資料越少越好,因此讓填寫資料這件事情給送審預算書的同事進行,針對預算書審查的內容進行填報。
預算書審查
資料盡可能重複利用,讓了解詳情的人員進行填寫最有效率,Streamlit好處是他可以自動適應各種裝置,所以手機部分也可以進行填寫,版型上也不至於太難看,在此可以將部屬的網頁做成QRCODE貼在辦公室主機旁,讓送審人員直接掃描填寫。

工程案件總覽
目前發展剛起步,未來可以做儀表板控制目前進度及預算分配情形。

載入招標文件
選擇已送審預算書內容,將其所填寫的資料依序導入到投標文件的欄位中,此處需要填寫的只有押標金金額及履約保證金。

後記
礙於公部門有資料外洩的疑慮,在此僅能提供招標文件產製網頁供使用,未來如有需要建立資料庫可再引用原始碼至貴單位進行使用,資料庫的建置又是另外一個課題了,本篇不再贅述。