發表文章

目前顯示的是 2024的文章

Excel VBA @ PCCES契約項目後處理

圖片
開發動機: [ 有需要的人可以寫信給我或用LINE官方帳號聯繫 ] PCCES為公共工程在製作預算書時常見的工具,匯出資料格式有"Excel"檔或"XML"檔。 輸出的預算書Excel上會有以下工作表,在製作監造報表、施工日誌、工程結算書、變更預算書等 後處理 時會需要針對下列內容進行使用: 預算總表 預算詳細表 預算單價分析表 預算資源統計表(較少使用) 但因為Excel本身儲存格欄寬的緣故,在較長的工作項目會有 切割到下一列 的情況,將工作項目 騰寫到其他後處理工具時會有一些困擾 ,包含複製貼上時會有缺少文字而必須從下一列再進行補齊(圖一)。 此外在Excel上的呈現如果沒有在PCCES上選取"組合編號"進行編號,也較 難理解其工作項目之間的層次 ,在小計與總計的計算過程會有諸多不便,導致工程結算書或變更設計預算書在對應各層之總和後處理容易發生錯誤。(圖二)。 圖一、落落長的工作項目(如壹.五.2.b) 圖二、未按照階層關係進行編號的預算書XLS。 解決方案: 一、針對PCCES所匯出之XLS格式進行內容拼貼,階層關係仍然需要手動處理,比較需要Case By Case,較難一併通用,以往的專案都以此方法進行後處理。 二、 針對PCCES所匯出之XML格式進行內容擷取 ,此為本篇文章主要說明內容,為了更容易的擷取工作項目及自動處理階層關係,特此撰寫針對XML格式之後處理小工作。 三、後續可以將彙整出的工作項目導入至"監造報表VBA"或者是"施工日誌VBA"以便進行每日在填報報表時的契約項目,未來在輸出"工程結算書"或"變更設計預算書"時也能夠與原設計項目階層相符(包含項次、工作項目、小計內容)。 圖三、PCCES所匯出之XML格式 關於XML格式有幾點需要注意的內容: 1.每一個階層都用標記"<...>"為開始,標記</...>為結束,這部分類似HTML的標籤樣式,XML本身也屬於一種半結構化的資料格式。 2.詳細價目表位於"DetailList",該階層內的"PayItem"則為所屬項目。 3.關於itemKind的分類有他的對應關係,mai

Python Flask呼叫 Excel VBA 實作

圖片
專案緣由: 近來在研究LINE BOT的專案,剛好前陣子有用GAS(Google Apps Script)所建立的網頁應用程式服務做一些題目,然而在LINE BOT中有一個機制是可以將使用者的內容發送一個POST到WebHook(一種API)進行處理,API的概念本身是一條URL,透過常見的GET、POST進行後端Server的處理,可以跟資料庫溝通或運算其他的服務。 一提到API,除了透過GAS也可以用Python Flask或者Django,用Python的好處是他可以用其他的套件進行其他的服務(此處為pywin32),以此案為例便是藉由Flask的前端渲染介面給使用者填寫資料(預計要引到ExcelVBA中的參數)後點選按鈕發一個Router到後端Server進行Excel VBA的呼叫程序。 應用場景: 適用於已經有些VBA的開發成果的夥伴且其他需要跨平台跨裝置的時候,透過瀏覽網頁便可以將所有運算都進到後端Server進行處理,並且輸出成果到前端提供下載連結(本專案範例)或者如果手機端使用者無法順利打開也可以透過寄信給User,讓User選擇合適的開啟方式。 圖一、網頁前端介面 圖二、下載成果內容(Username與Email為傳入參數) 結論: Excel 的好處是很多公式都已經寫好在檔案中,透過VBA的執行可以直接將資料都到Excel的報表版面上進行成果輸出,或者是檢核內容是否有NG而提示使用者哪裡需要再行更正。 手機或平板使用者無法進行運算Excel的內容時可以透過瀏覽網頁進行後端運算達到輸出成果的目的,藉由下載連結或收取信件即時展示成果。 正常來說Excel較常運行於Windows的系統,如為MacOS或Linux的使用者較難進行操作,因此也可以透過瀏覽網頁進行後端運算得到輸出成果。 後端要更新前端渲染內容或後端報表版面、運算邏輯相當便利,需要具備如何維護後端Server的知識。 如果對於資料庫是熟悉的,也可以將運算邏輯直接用Python去撰寫並且透過資料庫系統(常見如SQLite或MySQL或其他)去取代Excel,版面則可以用reportLab輸出,這樣也讓後端可以直接部署於Linux系統上(大多數的後端Server都是這個)。 如果有考量高度併發性(同時多人連線),Flask是屬於輕量型的網頁框架,也可以考慮用Node.js+MongoDB進行撰