發表文章

目前顯示的是 2023的文章

ExcelVBA搭配Python實作PDF合併

建築、土木工程的文件管理 在建築、土木工程領域,專案管理者和工程人員經常面臨著繁瑣的文件管理任務,尤其是涉及大量PDF格式的工程報表和工程圖紙。 歸檔時發現文件散亂或一張一張列印紙本放入卷宗都會很麻煩,不僅浪費寶貴的時間,還可能導致文件混亂、版本混亂的問題,因此,筆者藉由原本Excel的表格當基底搭配Python合併PDF套件,讓整個過程變得比較不那麼痛苦一些... 整體實作邏輯如下: 1.利用PyPDF套件指定input為file_with_paths.txt,output為Merge.pdf,透過Pyinstaller編譯成merge.exe,供之後呼叫合併PDF時使用。 (有需要這個套件的朋友再請加入LINE社群中,我會放在筆記本) 2.Excel中會有PDF文件列表,透過VBA產製出PDF預計要合併的順序路徑文字檔(file_with_paths.txt)。 3.VBA呼叫Shell去執行merge.exe,進行Python套件的合併作業。 4.執行完畢會產生一個Merge.pdf,進入檔案資訊檢查是否為最新版本,成功則完成。 解決方案的價值 1. 自動生成路徑,消除手動錯誤 我們的工具通過Excel VBA自動生成PDF檔案路徑,消除了手動錯誤的風險。工程人員只需在表格中列出相關PDF檔案的路徑,即可完成路徑的生成,節省了寶貴的時間並確保準確性。 2. 自動合併PDF,提高效率 使用Python的PyPDF套件,我們實現了PDF檔案的自動合併。這不僅節省了手動合併的時間,還保證了合併的準確性。透過ExcelVBA列表進行文件的管控,解決版本混淆的問題。 3. 快速檢查最新檔案,降低錯誤風險 工具最後一步使用VBA打開檔案總管,迅速展示生成的合併PDF檔案,自動檢查生成版本的時間,確保工程人員能夠開啟正確的檔案,而非開啟以前所生成的檔案。 P.S:Shell的操作因為執行流程是分開的,所以其實不能知道什麼時候才會完成 總結 這個小工具是基於實際需求而開發,旨在簡化專案管理中的文件合併流程。在建築和土木工程領域,文件管理通常是繁瑣且耗時的工作,尤其是處理大量的PDF文件時更是如此。 透過自動生成PDF路徑、自動合併PDF以及檢查最新檔案的功能為使用者提供了一個更有效率的文件生成選擇。ExcelVBA畢竟還是有它的極限在,此時使用者只需透過呼叫Python的套

Excel VBA@簽名檔小工具

圖片
 專案緣由 工程的進行中有各式各樣的報表,大多數皆需要人工進行簽名,不能用蓋章的方式替代,若工程查核時,日積月累的報表通通列出來,一次簽整本的就會簽到懷疑人生,竣工時還要好幾份副本,由此可見每天做報表還是很重要的,但工地大家都忙,沒有查核是不會乖乖做的。 因此,如果可以讓報表列印前,隨機從簽名檔資料夾中挑選一張,並在報表的指定位置隨機移動及調整大小貼上簽名檔,讓報表的呈現能有人工簽名的感覺,應該可以節省很多時間。 搭配報表的 批次列印 ,更可以看出效果如何。 前期準備動作 要完成這項專案前,必須要先有簽名檔的PNG或JPG們。 可以先準備一張A4紙,開始用【黑筆】瘋狂簽名,每個簽名大小都要差不多,將成果掃描至電腦上,並用 剪取工具 或其他美工軟體進行簽名的截取及去背,我是用 powerpoint自帶的去背效果 處理。 處理完成的PNG圖檔要放進簽名檔VBA中的【Sig】資料夾,名稱不一定要有意義,程式會自己隨機找一個。 註解:PNG通常是指沒有背景的照片格式,如為JPG有可能會在貼上時把後面的格線遮住。 圖一、簽名檔PNG們 實作邏輯 在列印報表的事件前先讀取該活頁簿中的Sig.txt檔案,依據當中的資訊去抓取簽名檔並貼上到報表的指定位置附近,隨機調整位置及大小。 Sig.txt: (作用工作表)                假設工程施工查驗表 (Left)                                     86.25 (Top)                                    734.896911621094 (Width)                               109.5 (Height)                              46.0261421203613 (簽名檔資料夾)           G:\我的雲端硬碟\ExcelVBA\簽名檔VBA\Sig 操作步驟(影片+步驟拆解) 1.打開要放簽名檔的活頁簿 2.將Sig資料夾中的簽名檔放置於報表中的位置並調整好大小 3.打開簽名檔設定工具.xls 4.回到設定工具 5.點選"1.列出工作表" 6.選擇需要簽名的工作表,在C欄填上"Y" 7.點選按鈕"3.擷取簽名資訊&qu

Excel VBA@文檔管理系統

圖片
 文檔管理系統 主要為處理公文、會議的Side Project,其中功能包含利用AI工具去辨識紙本公文或PDF公文的文字內容,建立發文字號、發文日期、公文主旨等重要資訊,供使用者進行後續利用。 需要必備的技能或工具 Tesseract OCR(***圖片轉文字辨識套件) python Excel VBA 在Excel VBA中使用shell呼叫Python的PDF_OCR.py執行Tesseract OCR辨識指定PDF文檔,產生output.txt後,提供Excel VBA讀取利用,如對於python比較沒有概念的朋友也可以直接使用pyinstaller建立好的PDF_OCR.exe執行辨識動作。 建立流程 1.建立Tesseract的操作環境,請參考 Tesseract OCR - 繁體中文【安裝篇】 2.建立Python的可執行環境,請參考網路大神範例,有一拖拉庫 3.建立Python的虛擬開發環境,下載相關套件 pip install pillow pytesseract pip install PyMuPDF pip install pyinstaller 4.撰寫Python的腳本檔 (PDF_OCR.py),由衷感謝chatGPT的發展,省很多事去探索。 import sys import fitz # PyMuPDF from PIL import Image import pytesseract import re # 导入re模块 def extract_text_from_pdf(PDF_PATH, OUTPUT_PATH): # 创建一个PyMuPDF文档对象 pdf = fitz.open(PDF_PATH) # 提取PDF页面中的文本 text = "" for page_num in range(pdf.page_count): page = pdf[page_num] text += page.get_text() # 获取页面的宽度和高度 width = int(page.rect.width) height = int(page.rect.height) # 使用Tesse

ExcelVBA@施工照片整理的應用範例3-建築工程

圖片
客戶使用情境: 舉例:今天工程師要請款,工項名稱為泥作,會先將年的資料夾(第一層)引入施工照片VBA,將所有月日資料夾(第二層)中的照片通通列到清單上,並針對顯示屬性進行篩選設定 工項:泥作 作業項目:粉光 作業內容:查驗 施工位置:勾選好幾個樓層 確認篩選結果後列印成每頁報表為三格照片的格式,向業主請款。 施工照片VBA實作步驟: 1.照片資料夾以日期為分類,第一層為月(EX:9月),第二層為日(EX:04)。 圖一、施工照片資料夾檔案結構 2.當請款或提送查驗照片時會需要列印施工照片報表作為佐證。 3.報表格式會需要說明註記,依序為日期、工項、作業項目、作業內容、施工位置。 圖二、施工照片屬性註記表單 4.當要列印的時候,工程師可以將對於施工照片的屬性進行篩選後印出。 圖三、篩選出工項:泥作、作業項目:粉刷 圖四、檢附施工照片報表,進行請款 結語: 針對照片進行屬性註記後,可以將屬性資料存在照片檔案名稱,未來引入時可以直接帶入,節省人工編輯檔案名稱的程序。光查看照片名稱(IMG_XXXX),很難知道照片內容是與什麼有關的,通常都是有需要的時候才會一張一張點開來貼照片,但這樣子真的有比較順嗎? 篩選的方式因人而異,你也可以篩選出有做查驗的照片、缺失改善的照片、材料進場的照片,一切端看使用者的情境去做設定,只要有邏輯有做好屬性標記,程式基本上都能協助你去完成這些麻煩的事情。 如果他能讓你節省下改檔案名稱的時間、找出正確的照片的時間、貼上照片調整大小的時間、填寫報表內說明註記的時間,那麼出照片報表的這件事情, 將由數個小時變成瞬間完成 。 有可能應用到日常業務的朋友歡迎填寫表單,工程文書的生態必須有所改變,大家才會快活,由衷建議不要再浪費時間做這些電腦可以做的事情了,他做得又快又準確,何不嘗試看看? ***1019更新*** 施工照片VBA已經支援使用者可選擇多種版型進行列印(施工抽查、改善前中後、驗收紀錄...等) 檔案下載連結: https://drive.google.com/file/d/1kGe0cRtzuwpP_JSc2cxcXIMdSf3ZV0KE/view?usp=sharing 將整個ZIP下載下來,解壓縮,執行主程式,裡面Main工作表會有個教學模式。 *研討會分享* 如果對VBA在設計/監造的應用上有興趣 可以訂閱我的LINE通知或加入LINE社

談如何讓開發者聽懂你的需求

 要做客製化,說出需求、找對人很重要! 所有的軟體影片都是在展示開發者能做出"類似功能"的產品,要100%適用在你的日常業務,基本上不可能,因為每個使用者的使用情境、業務邏輯、報表格式,都會有所落差,細微落差也是落差。 所以,敬告所有不明白產品是否合適的你,一定要把你的需求具體的、完整的說出來,沒有說出來,絕對不會有人知道合不合適,每個人都跟我說他有需求,但光聽到這一句,我真的不知道你的需求是什麼,如果連自己的麻煩事都不想說,我也幫不上你的忙。 如果 ,你不是不想說,而是你不會說,那歡迎你跟開發者 預約一場會議 ,讓開發者透過問題來引導你該怎麼說你的需求,這樣才有幫助,我非常願意花這個時間協助你節省時間。 我想關於溝通這件事情,值得我好好發一篇文告訴大家,應該要怎麼講出具體的需求是什麼。 即便你看過我的影片並且跟我拿到產品,如果後續沒有經過調整以及被人帶著學習程式中對有幫助的功能,我敢跟你保證,此舉完全就是浪費你的時間也是糟蹋我的作品而已, 產品必須要可以解決你的日常業務 ,才是好的產品。所以很多軟體下載下來之後,無法解決問題就丟資源回收桶了。 因為有麻煩的事情才會有程式的出現 人可以處理的事情,電腦才能處理,你都做不到了就別奢望程式可以。程式是人寫出來的,畢竟程式就是一種腳本,讓電腦乖乖去做人類指派的事情,而且通常是繁瑣、大量、簡單的事情,這也是為什麼程式沒辦法做到100%的原因,人終究還是有它存在的價值,總會需要處理那些程式無法做的事情,或替他排除問題。 程式很單純,資料進來=>處理邏輯=>資料出去,你會覺得麻煩的地方就是在處理邏輯,而 這正是我能為你帶來的價值 ,有邏輯就可以程式化,原本花費很大量的時間會瞬間被完成,省下來的時間你就可以做更多更有產值的事,就算不做事單純在那邊滑手機也會感到身心舒暢,重複的動作就讓電腦去做,他做得比你快又比你準,為什麼不讓他做就好? 所以到底我要怎麼描述我的需求,開發者才"可能"聽得懂? 要讓開發者聽得懂需求,有幾個重要的原則。 一、把使用者情境完整重現 需要你把資料來源呈現出來,跟我說你看到什麼東西做什麼事情,最後成品應該長怎樣。 二、找出麻煩事發生在哪個階段、頻率如何 找出在處理邏輯上的步驟是最麻煩而且最繁瑣的,發生的頻率有多長,會消耗多少時間。 開發行為是一個成本,要能省

談關於軟體定價心理

 結論先寫在前面 成年人交易的貨幣有兩種,時間以及金錢。 可能會出現的情況,老闆通常沒有時間,員工通常沒有錢。 老闆用錢買員工的時間去賺更多錢 員工用自己的時間去賺更多錢 因此, 只要可以讓人可以賺錢或省時間,就是有價值的產品 。 軟體應該怎麼定價 這需要藉由你的成本跟效益而定。 如果產品可以協助你省掉做8個小時的工作,你會覺得付出1個小時的費用是昂貴的嗎? 如果你中了1000萬的獎金,但是需要繳20%的錢給政府,那你會不想繳嗎? 本益比很有趣,他是評估你的成本能帶來多大效益的方法,成本太接近效益,又覺得這樣有風險,成本太遠離效益,又不會有人願意對你掏心掏肺,因為你的成本也是別人的利潤,市場是有效率的,出得起香蕉就只會請到猴子。 你想要有好的服務,那一 定會是需要有個合理的價格,天底下沒有白吃的午餐。 在現實層面,計算效益的10%~30%差不多就是個合理的成本,多了老闆會怕,少了員工會怕,什麼都想要自己賺,那就得要很有本事,畢竟時間有限,集思廣益勝過閉門造車。 軟體的定價好貴? 你會看到產品覺得很貴就表示你的時間很多,請把你的時間燃燒殆盡,土法煉鋼也是個好方法,不只不用耗費學習成本還能抄襲前輩留下的檔案,直接交卷。 但是這樣的方法,真的是你想要的嗎?到底是因為 學不來 還是 不想花錢 ,這是兩回事。 好的產品會讓你有 多出來的時間做更多業務賺更多錢 ,並且只收你10%~30%的成本,這樣一點都不貴,我的時間就這樣,我省下來的時間我可以上網看股票發呆,還有可能因為多出來的時間學習到另一項新的技能,為什麼我要浪費這麼多的時間做那些 重複、繁瑣、人為錯誤率高 的步驟,然而這些明明就是電腦可以透過按個按鈕就瞬間做完的事。 舉一個很有趣的例子,有個顧問公司因為有自動繪圖的軟體,在標其他案子的時候,成本就是比別人低,一套軟體抵過十個工程師在那邊拼命操作,而且程式不會累又準確,人工還會靠邀跟做錯,因此大多數的案子都被他低價包走,別人沒有辦法像他降價的那麼多,但其實老闆並沒有因為買軟體而賠錢,還拿到更多案子賺錢了,所以軟體很貴?要不要想想人力一個月就要3.4萬,還要勞健保。 關於訂閱制與買斷制的看法? 我比較偏好訂閱制,訂閱我可以享有隨時都保持最新的產品,還不用一次付出那麼多的費用(分期付款)但可以享用最好的服務,最重要的是,訂閱制可以享有開發者隨時服務你,這是多麼划算的一件事,遇

ExcelVBA@施工照片整理的應用範例2

圖片
前言: 本篇為延續前作 ExcelVBA@施工照片整理的應用範例  的後續改版內容,主要針對圖形化介面優化及調整照片列印排序方式與輸出方式,如有新版本需求者可加我官方賴(@903qzhwa)並打入關鍵字【施工照片】。 0914更新:  ExcelVBA@施工照片整理的應用範例3-建築工程 DEMO影片: 圖形化介面差異: 圖一、舊版本圖形化操作介面 圖二、新版本圖形化操作介面 操作介面功能解說: 1.取得資料夾:指定施工照片被放置的資料夾並將路徑放於儲存格B2。 圖三、指定施工照片資料夾位置 2.查看資料夾:打開儲存格B2路徑的資料夾。 圖四、.將資料夾名稱都依照[日期-事件]註記並放置。 3.貼上結果:將該資料夾中的圖片資訊貼到工作表Result。 3-1.貼上縮圖勾選後,當貼上圖片資訊時會依照右側縮圖寬度貼上小圖。 3-2.顯示大圖勾選後,當移動至工作表Result時,會同時顯示大圖示,提供使用者依圖片進行資訊填寫。 圖五、左側為施工照片貼上縮圖的效果,右側為施工照片顯示大圖的填寫資訊。 4.列印報告:選擇排序方法(a.資料夾b.日期c.檢查項目)後,依照所指定的方法去依序將圖片放入施工照片報表範本中,當到達欄位上限便複製到一個新的活頁簿,新工作表命名為[列號-列號-列號]。 4-1.顯示日期:每一個施工照片右下角是否要顯示拍攝日期 4-2.背景遮罩:每一個施工照片右下角是否在顯示拍攝日期時,同時將網底一併填色。(如右側範例) 圖六、施工照片的顯示日期與背景遮罩範例。 5.更改檔名:依據儲存格B5的資料結構,依序將工作表Result表頭對應欄位的資訊併入檔案名稱並針對照片作更名。 圖七、依照檔名結構將施工照片名稱重置,方便日後萃取檔名存入圖片資訊。 6.萃取檔名(在貼上結果的時候就已經會先做一次):依據儲存格B6的資料結構,判斷照片的檔案名稱結構是否得以切分,並依序填入其指定表頭位置。 7.合併列印:經左側下拉式選單選取先前報表之成果規則,依照使用者框選的項目進行報表合併。 圖八、工作表Main的列印清單,框選要合併的編號後便可進行合併列印,當合併過程中好像有點卡,可以再回去點擊主程式一下,讓主程式 喚醒一次 便可繼續進行後續合併。 圖九、合併後的範例,如要列印可以直接"列印整本活頁簿"即可。 操作小技巧: 1.建議將資料夾名稱都依照[日期-

Excel VBA@開口契約

圖片
開口契約 常見於政府機關為減少招標程序提升施政效率而建立之單價契約,其相關統計分析事項至少包含預算開支、請款派別、施作內容及佐證照片需要彙整、分類,因此筆者也開發了ExcelVBA在開口契約的小專案,希望能夠為工程人員帶來一點便利性。 運作邏輯 引入PCCES,建立契約項目 業主提出需求,進行會勘 內業人員填寫 通報 表單 施作人員依派工別至現場處理 內業人員填寫 施作 表單,生成照片資料夾 將 施工照片 放入照片資料夾 將施作表單之完成契約項目匯入至 施工日誌 自動生成施工日誌及佐證照片報表 基本資料建立 圖一、開口契約成立時,先引入PCCES至程式中 建立通報表單使用之契約項目及單價。 圖二、小案件開始前須經由通報表單成立後才得以撰寫施作案件。 圖三、施作清單上記載派別、地點、契約項目等等重要資訊。 圖四、將各施工照片放入系統產生之{ 緊急No_地點_完成日期 }的施工照片資料夾。 輸出成果 圖五、依照施作表單上所記載契約項目匯入至施工日誌中的對應數量,透過右側 批次列印 功能輸出紙本、PDF或XLS檔案供使用。 圖六、依照施工照片資料夾存放照片匯入至照片報表,並依照不同編號額外建立單一報表,列印時可使用 列印整本活頁簿 批次列印成PDF或紙本。 圖七、依照施作表單記錄統計各派別金額。 結語: 只要資料有被記錄在Excel中就可以針對記錄內容做任何想分析的事情,包含匯出哪些通報內容尚未施作,最常被通報的內容是什麼?地方民意在追問執行情形時也可以第一時間回復幾日內處理完畢...等等,如果目前手邊都還是用紙本來處理或者是沒被程式化過的Excel檔,倒是可以考慮一下是否要用現行這套處理模式,想必可以達成降低錯誤、節省人力的目標。

Git、Github在VBAIDE中進行版本控制

 前言 相信很多人在寫Code的時候都會跟檔案綁在一起,每次開發完的東西如果有比較重要的改版就會先在名稱後面加入當天日期作為版本的區隔,例如:縱斷面繪圖20230622.xls。這是我以前對於「版本控制」時的概念,也因此我的資料夾裡面重複存了很多xls,上面有各式各樣的日期,但對於這些日期我根本不知道他到底改什麼,我只知道最新的"應該"比較沒有問題,然而這是指放在同一個資料夾中的狀況,若是分散在不同電腦的資料夾,有些同樣最新日期名稱的可能也有部分內容改了你也不知道,這其實對我來說是件滿麻煩的事情,也引發我這次撰寫"真"版本控制的動機。 假設 正常人在撰寫Code時,可以放Code的區域有以下如列 Excel物件(Thisworkbook、worksheet) 模組(Module) 物件類別模組(Class) 表單(Form)。 這裡我會假設各位的code沒有在worksheet上面,因為他所產生的doccls在匯入時會有些麻煩,而thisworkbook雖然也是屬於doccls一環,但有些開啟就需要先啟動的code是無可避免的,這需要開發者進行手動處理關於副檔名為doccls的內容。 GIT基本操作 關於GIT常見的基本操作項目如列,教學網路上有一堆, 感謝六角學院教會我!! 這裡假設大家已經了解GIT基本操作功能及具備Github上遠端版本控制的操作能力。 git init (初始化資料夾) git add (加入索引) git commit (加入註記) git push (上傳至Github) git clone (自Github下載) git fetch (自Github下載至已初始化資料夾) git checkout (切換分支或結點) 操作步驟 將巨集設定中的「信任存取VBA專案物件模型」打勾。 打開Git Bash 指定一個資料夾進行git init。 在開發者目前所在的VBAIDE中匯入模組GIT.bas。 執行巨集「ExportCodesToFolder」選擇第2步指定資料夾。 確認更改無誤如要進版需要再進行第4步一次。 透過Git Bash進行git add、git commit、git push 等操作。 **換了一個檔案開啟,此時若發現程式碼版本有問題** 在開發者目前所在的VBAIDE中匯入模組。 先