- 12月 17 週三 202518:00
【MIS手札】年度稽核計畫上傳轉檔小程式
- 6月 18 週二 202417:45
【綜合】Office 單機版、Office 365要用哪個比較好?
- 3月 19 週二 202417:45
【讓機器人幫我工作】Power Automate Desktop 實作-存檔前先檢查
在上一篇擷取螢幕畫面併存成圖檔的範例中有提到,該流程在執行後是會直接覆蓋掉存檔路徑中,
原本存在以執行當天的日期為檔名的圖片的,並沒有任何的防呆或是檢查!
所以有很高的機率會因為不小心按到執行,又讓流程跑完,然後原本要的圖檔就不見了…
(因為新的圖檔給取代掉了)
這時候,如果這圖檔非常重要,那麼如果有做備份就馬上找備分中的檔案回來以外,
就真的是沒招了!
所以這時候在流程設計之初,就要先想到這一點,並加入一個判斷流程,
讓電腦先確認指定的資料夾路徑(存檔路徑)中,到底有沒有當天的檔案存在,
如果沒有的話才直接存檔!(這點不只針對圖檔,也適用於各種類型的檔案)
而讓電腦確認指定的資料夾中有沒有指定檔名的檔案存在,其實是有好幾種方式的,
但這篇的範例主要是針對存檔時,要電腦先去做確認的流程喔。
其他的做法會等有機會的時候再來講解。
下面就來看看確認檔案是否存在的流程要怎麼製作吧!
首先先把"拍攝螢幕截去畫面"動作中設定的存檔路徑複製下來!

先在左側動作清單中找到"檔案"項目,
並展開清單後選取並將"如果檔案已存在"動作

然後把這動作拖曳到編輯區中"拍攝螢幕畫面"的上方!

在跳出的設定視窗中的"檔案路徑"欄位上貼上剛剛複製的路徑後點"儲存"

之後,在編輯區的流程中就會多一個"如果檔案已存在"和"End"的判斷式
在"如果檔案已存在"和"End"中間的區域就是設定判斷式的條件的位置

判斷式是什麼呢?
就是如果滿足了你設定的條件後,你要電腦去做什麼事情。
口語化點就是:如果怎樣,就這樣…
這部分和"條件"動作清單中的If是一樣的概念。

但"條件"清單中的動作主要是針對PAD中設定的"變數"去做判斷,
而檔案的"如果檔案已存在"這個動作,單純只針對"檔案"的存在與否去做判斷
※雖然"檔案已存在"這個動作名稱是"已存在",但在其設定視窗中,
"如果檔案"後面的下拉清單內,其實是可以切換"存在"或"不存在"的!

由於這篇還沒有說到"迴圈"(loop),所以這邊就單純的讓機器人在發現檔案已存在時,
直接跳出個通知視窗告知使用者檔案已存在了!
所以就到左邊動作區域,展開"訊息方塊"的清單

把"顯示訊息"給拖曳到右邊編輯區中,"如果檔案已存在"的下方

然後設定下"顯示訊息"的內容

主要設定"訊息方塊標題","要顯示的訊息"即可。

"訊息方塊圖示"的部分則可視需求調整(預設為"無")

設定完成後,點擊"儲存"即可。

這樣就能讓電腦自己先去判斷檔案存不存在了!

到此,目前的流程是下面這樣的:

但是如果只是這樣還是會有問題,因為剛剛的判斷式並不"完整"!!
因為如果照上面的流程來說,電腦只是單純地去檢查有沒有檔案,
如果有檔案的話,就跳個訊息通知告訴使用者而已。
然後電腦會繼續執行下一個動作,也就是"拍攝螢幕擷取畫面",然後擷取畫面並存成檔案。
也就是說,在這流程中,如果原本有檔案的話,還是會被取代掉的!
那也許有人會問:我不是已經加了一個判斷式了嗎?
答案是沒錯的。
我們上面是加了判斷式,而判斷式也能正常執行的,
只是我們要電腦做判斷的條件是:
"存檔路徑中有沒有檔案,有的話就跳個通知"罷了!
也就是說,我們並沒有在判斷式中告訴電腦,
"如果路徑中沒有檔案的時候,它要怎麼做"!!
也許還會有人問:下面一個動作就是"拍攝螢幕擷取畫面"了啊!?
這個答案也是正確的,不過問題就在於這動作的擺放位置上。
因為我們並不是把"拍攝螢幕擷取畫面"這個動作放在判斷式內,
而是要電腦判斷完之後才去執行"拍攝螢幕擷取畫面"這個動作,
也就是對於電腦來說,整個判斷式會視為"一個""連貫的動作",每一個步驟都是"一個單獨的動作"
(一個判斷式會對應一個End當作結束)

所以遇到判斷式時,電腦會將判斷式中的流程視為"一個動作",
因此電腦會執行完判斷式中的所有動作以後,才會繼續執行下個動作(第6步)
電腦執行順序:1→2→(3~5)→6
因為我們這個流程相對簡單,所以看不出來1→2→(3~5)→6和1→2→3→4→5→6的差異…
所以我們假設下,在第4步是呼叫一個有10個動作的子流程A,那麼執行順序會是什麼呢?
其實對這流程來說還是1→2→(3~5)→6,但實際上電腦做了1→2→(3→A(1~10)→5)→6
這邊也許我的表達不是很好,也有點難理解......
不過這邊就先記得:
"遇到判斷式時,電腦是會先把判斷式內的動作都執行完,接著才會執行下個動作"
的原則吧!
所以基於上述的原則,就來修改下判斷式吧!
首先在判斷式中加入一個Else的動作(在動作區域的條件清單中)

拖曳到到右邊編輯區中,"顯示訊息"的下方

Else是指和判斷式設定的條件相反時的意思。
口語化來說就是,如果怎樣,就這樣,不然就那樣。
所以在這判斷式中,放在這個Else下面的動作是在電腦判斷出檔案"不存在"時才被觸發!
所以接下來就是把"拍攝螢幕擷取畫面"這個動作給拉到Else下面:

完成後如下:

先將流程"儲存"之後,來執行兩次看看結果吧!

執行第一次:
結果正常,電腦直接跑完流程,並產生一個圖檔。

執行第二次:
跳出訊息通知視窗,告知檔案已存在。

並且不會取代原本的檔案!

如此一來,基本的防呆就完成啦!
※補充說明
判斷式:
基本上就是以前數學學過If x = 1, y = 0,然後怎樣怎樣的概念!
只是在電腦這邊還多了Else和Else If。
Else If是用在多條件的判斷式,但是在簡易的流程中,
其實可以用If判斷式中加入另一個If去做…
顯示訊息:
訊息方塊按鈕可以調整成常見的兩個按鈕(確認+取消)或其他。
都可以在設定視窗的"訊息方塊按鈕"旁的下拉式按鈕中調整!

預設按鈕也可以變更。
如果不想訊息視窗被其他軟體給蓋掉,則可以開啟"訊息方塊一律保持在最上方"

如果想要訊息視窗自動消失,也可以在開啟"自動關閉訊息方塊",並設定持續顯示的秒數

- 3月 15 週五 202417:45
【讓機器人幫我工作】Power Automate Desktop 實作-取得系統日期
這一篇就來進入實作的部分。
首先,在設計自動化流程前最重要的一件事情就是必須要有一個目標,也就是你想要機器人幫你做什麼呢?
所以我們來設定一個目標,那就是:
我想讓機器人幫我做螢幕截圖,然後用當天日期當作檔名存成一個圖檔!
在有了這個目標以後,我們就來解析一下,我的目標在執行的時候的流程會是怎樣的吧!
我們先把目標拆開成兩個部分,也就是第一部分的我想讓機器人幫我做螢幕截圖,
和第二部分的然後用當天日期當作檔名存成一個圖檔。
在第一部分的我想讓機器人幫我做螢幕截圖的動作,由於我沒有要求在哪個程式或軟體上執行時的畫面截圖,
所以直接截圖就可以了!
而第二部分的然後用當天日期當作檔名存成一個圖檔,則是會稍微複雜一點,因為這段話總話要拆成幾個動作,
分別是:
1.取得系統的日期
2.把取得的系統日期變成一個文字變數
4.把文字變數變成檔名
5.存成圖檔
以上這幾個動作缺一不可,因為還是那句話,電腦其實很笨的!!
以人類的思維是:"把那個日期當成檔名存起來就好了"的這麼一句話,但對電腦來說,
它最少要拆解成這樣5個項目才能完成這一句話的事情呢!
所以在設計流程的時候不僅要有個明確目標以外,這個目標內的流程都要是有固定作業流程的喔!
提問:如果作業流程不固定的話能不能做?
只能說,有機會可以,但很高的機會都會失敗!
因為光一個有著明確的目標的流程都要拆成5個動作了,那當流程不明確的時候勢必得要做很多判斷的動作
去驗證當下是屬於哪種情況,機器人才能確定接下來要走哪個流程,如此一來光流程就會很龐大又複雜,
更別說設計時又需要花費大量的時間去開發和除錯了…
也有可能你原本設想的情境都開發&除錯完了,機器人也正式上線運作了,結果卻突然發生從未想過的狀況,
結果就是又得來重新開發一個新的流程……但這會是最後一次發生這種狀況嗎?
所以如果流程是"不固定的",那麼其實不建議用機器人去跑!
上面的補充說明有點跑題了,現在讓我們回到主題。
由於上面已經把目標拆開成為兩個部分了,所以在流程設計上也會先從第一部分開始,
再接序到第二部分,最後完成整個流程。
那就讓我們來看下第一部分我想讓機器人幫我做螢幕截圖要怎麼做吧!
這邊非常簡單,因為螢幕截圖的"動作"在"工作站→拍攝螢幕擷取畫面"就有了!

所以只要將拍攝螢幕擷取畫面的這個動作放入到編輯區內就可以了!
以滑鼠左鍵點擊並按住動作清單中的"拍攝螢幕擷取畫面",然後向右手邊拖曳至編輯區內:

系統會跳出提示訊息,詢問要擷取哪個畫面
若沒有雙螢幕或其他需求,這裡就不需要進行調整了!

或是可以在擷取的下拉清單中選擇要擷取的螢幕畫面

選好以後一樣點"儲存"按鈕就可以了!
但由於我的目標是將"螢幕畫面存成一個圖檔",所以在"將螢幕擷取畫面儲存至"的下拉清單中,
要將"剪貼簿"改成"檔案"

但這個時候就發現有趣的事情了,那就是要把畫面截圖存檔時是需要"存檔的路徑"和"檔名"的!
(設定視窗下方可以選擇影像格式)


所以要達到我們一開始設定的目標,其實是要先做第二部分的!!(也就是要先取得檔名)
這部分也可以看出,雖然目標是一樣的,但需要一步步執行每個動作的電腦和人腦的邏輯順序不一定完全一樣的。
※當然你也可以在一開始設定目標時改成這樣:我想讓機器人幫我將圖片用當天的日期做檔名來存檔,然後圖片內容是螢幕畫面的截圖;但這樣敘述總覺得在先後順序上感覺怪怪的......
由於檔名是需要從第二部分取得的,所以這邊先按取消,暫且先跳過存檔位置和檔名的部分,
改為進行第二部分的流程製作!
既然是用當天的日期檔作為檔名,那麼一開始就必須要取得系統日期了
(系統日期必須要是正確的喔)
而這個動作在"日期時間"清單內的"取得目前日期與時間"

然後同樣將它拖曳到編輯區,並放在拍攝螢幕擷取畫面的上方
(系統會出現一條灰色橫槓作為標示線,讓你確認拖曳到哪個位置)

拖曳後系統會跳出設定視窗

由於我想要的檔名只要日期,所以在擷取旁的下拉式清單中選"僅目前日期"

接著PAD會自動產生一個"變數"給擷取時間這個動作以後得到的結果
(變數名稱也可以自行修改,下面會說到)

也就是找個地方(變數)放擷取系統日期後得到的日期(值)。
接著在到動作的"文字"清單中找到"將日期時間轉為文字",
並拖曳到編輯區中的"取得日期與時間"的下方!

系統一樣會出現"將日期時間轉換為文字"的設定視窗

在"要轉換的日期時間"旁的欄位中,點選最右邊的{X}字樣,
然後選取前面擷取系統日期動作所產生的那個變數

選取後:

接著設定格式,預設為"標準",選擇"標準"時,系統會依照下一個選項"標準格式",
把值寫入"將日期時間轉換為文字"的變數"FormattedDateTime"中
至於產生的文字長怎樣,則是可以參考"樣本"中顯示的文字。

系統也在下拉式清單中預設了很多"標準格式"供開發者選擇,如果沒有特別的格式需求的話,
直接使用預設的也可以

完整的設定畫面:

不過像我在做每日檢查或是檔案確認時,每個系統所產生Log檔的檔名格式都不一定是一樣的,
所以"要使用的格式"那邊就得選擇"自訂"了!


然後要在自定格式旁的欄位中輸入我要的"日期格式"!
說明:
西元年 = yyyy(完整四位,如2024),或yy(末兩位,如24)
月份 = MM(完整兩位,如01;要特別注意,格式這邊的月份是用英文大寫)
日 = dd(完整兩位,如01~31)
時 = hh(完整兩位,如01~24)
分 = mm(完整兩位,如00~59)
秒 = ss(完整兩位,如00~59)
※排列順序就看需求使用了!
將滑鼠游標停在自訂格式欄位上時,也會顯示說明

這邊採用yyyy-MM-dd這個的格式,所以將yyyy-MM-dd填入欄位中。

然後點"儲存"按鈕,將設定儲存起來。

這樣檔名的部分就完成了!

至於為什麼要多做一個"將日期時間轉換為文字"的動作呢?
原因是因為對於電腦來說,時間格式和文字格式是兩種完全不一樣的"格式"!
想必大家都有用過Excel吧?在Excel中是可以針對儲存格設定不同的格式的,
不過一旦兩個儲存格的格式不同,那就有可能無法做計算或合併了!

所以保證格式的正確性就是一件非常重要的事情了!!
而在PAD設計的流程中,CurrentDateTime這個變數就是日期格式,
對電腦來說並不是"文字格式",但存檔的檔名卻是"文字格式",
所以還是先轉換下比較保險!
※關於變數的補充說明:
1."變數"的原理就是數學中教過的未知數,如:X、Y、Z。
所以變數的名稱是多變的,可以用任何名稱當作變數名稱
(但建議最好是可以一眼識別用途的名稱比較好除錯)
2.變數名稱請使用"英文"
3.動作的變數是可以修改的!
在系統預設中,同一個動作多次使用時,
第二個同樣的動作的變數會自動被加上流水號(從2開始,依序+1)

如果不想要這個名稱,也是可以修改的!!
修改方式為:
展開變數已產生(點選前方的>展開)功能

以滑鼠左鍵直接點選變數名稱進入反白的編輯模式
※主要修改的是兩個%符號中間的名稱,就算不小心刪掉%符號也不用擔心,
因為現在系統會自動幫你加上去了

改好後直接按鍵盤的Enter,或是在設定視窗的空白處點滑鼠左鍵

修改後:

4.當流程被執行過了以後,可展開位於PAD軟體右方的{X}圖示
(在Copilot圖示下方(2024/03的版本))

這邊可以看到流程執行後,每個變數在流程中得到的值是什麼!
(方便確認與除錯使用)

5.一個變數中可能不只有一個值
以CurrentDateTime為例,這一個變數其實可以細分成年、月、日、時、分、秒。
而在設計判斷式時,包含在CurrentDateTime內的年、月、日、時、分、秒
其實都是可以單獨取出來被使用的!
如要取得CurrentDateTime的年是幾年時,在判斷式的運算元變數中就可以設定為
%CurrentDateTime.Year%
月則是:%CurrentDateTime.Month%

日為:%CurrentDateTime.Day%

更多變數應用可參考這篇:https://dotblogs.com.tw/ryuk/2023/06/25/010422
我們繼續回到主題。
取得檔名的部分處理完了以後,接著就回到第一部分儲存檔案的檔名和路徑設定。
再次於編輯區內的流程終點開"拍攝螢幕擷取畫面"的動作

把儲存至剪貼簿改成"檔案"

在影像點選"選取檔案"圖示

先設定一個存檔路徑及臨時檔名(線隨便設為123,之後會改掉)

點了"開啟"後會回到"拍攝螢幕擷取畫面"的設定視窗,但系統會報錯,不過沒關係,
在路徑的最後加上前面日期轉換成文字的"變數名稱"並加上"副檔名"(圖檔格式)就可以了
更改前:

影像檔的存檔路徑中用"變數名稱"(%FormattedDateTime%)取代"臨時檔名"(123),
並在最後加上圖檔的副檔名(如,.png/.jpg...等,記得格式前面有加上一個點符號(.))
![]()
然後把下面的"影像格式"改成和存檔路徑中設定的副檔名相同的格式,
並點選"儲存"按鈕即可!

設定完成畫面:

如此一來,流程基本就算設定完成了,要記得存檔一下喔!

接著就讓我們執行一下吧!!

點選執行後,在軟體左下角會有目前的狀態:

補充說明:這裡需要等待一下,然後PAD軟體可能會呈現無回應/反白的狀態…
除非Windows真的跳出警告視窗通知PAD程式無回應,不然就只要等它完成就可以了!
執行成功:

最後再說明下,由於本次作為範例的流程只是單純要機器人去做"截圖+存檔",
並沒有要機器人去檢查存檔路徑內是否已經有檔案存在,所以要是執行了1次以上的話,
前一次執行的圖檔是會被取代掉的!
這點要特別注意喔!!
如果不想要讓執行後的圖檔被取代的話,也是可以做到的,
作法上除了需要加上判斷式確認有沒有檔案以外,還要在檔名後面加上流水號作區別,
所以會比本次的範例來得複雜一些!
以上,就是本篇的全部內容了。
最後還有個小提問:
那就是有些動作中會有個"錯誤時"的選項,到底要不要去設定呢?

我自己是只靠判斷式的If,Else if和Else去執行,所以沒有去設定那個部分。
如果有心力和時間是可以去設定下的喔!
- 3月 13 週三 202417:45
【讓機器人幫我工作】Power Automate Desktop 基本介紹
- 3月 06 週三 202417:45
【網路相關】路由器要接LAN孔,還是接WAN孔?

路由器,以現在市面上的販售產品定義來說,已經是包含WIFI功能的分享器了(無線AP)
已經不是曾經那個長得一副SWITCH的樣子,但裡面有UI/Console(有網管功能)的Router了......
不過商用的多AP型的Wifi controller還是長這樣就是了
- 11月 10 週一 202517:45
【MIS手札】Rocky Linux 8 建置篇 1
- 7月 30 週三 202517:45
【綜合】淘寶啟動—Edifier G1500 MAX 2.1電競喇叭
- 7月 15 週二 202517:45
【MIS手札】無法移除Adobe InDesign!?
- 6月 19 週四 202517:45
Power Automate Desktop 注意事項補充


