2021年3月の.NETラボ勉強会で「Power Automate Desktop入門」というお話をしました

月曜日 , 29, 3月 2021 Leave a comment

 2021年3月度の.NETラボ勉強会でPower Automate Desktopについてお話しました。

 

.NETラボ 勉強会 2021年3月

 

 ちなみに.NETラボはコロナ禍の2020年初めから、いち早くオンラインでの開催を行い、ほぼ毎月開催している素晴らしい勉強会です。

 スタッフの皆様に感謝!!

 

 その時に使用したスライドが以下です。

Power Automate Desktop入門 from Makoto Nishimura
 
 時間が無くて話しきれなかった部分もありますので、主にデモ周りについてブログに補足しておきます。
 

使用したPower Automate Desktopのバージョン

 
 デモのサンプルはバージョン2.6.00158.21069で動作確認済みです。
 
 

フローはコピペできる

 
 フローの編集画面で、フローを選択してコピーすると、そのフローを文字のコードとしてコピーできます。
 そのままPower Automate Desktopのフロー編集画面に張り付けるとフローとして追加することができます。
 
 例えば「3秒待つ」というフローは以下のコードになります。
 
WAIT 3 
 
 このコードを張り付けると以下のようにフローが追加されます。
 デモ解説で掲載したコードはこのように使用してください。
 

デモ00:パワーポイントを起動してスライドを開始する

 
 デモという形ではありませんが、初めにパワポをPower Automate Desktopのフローで起動してセッションを始めました・・・始める予定でした。
 実際は、最後のF5キーの入力が上手くいかず、手動で開始することになりました。
 
 その際に作成したフローが以下。
 
 
・アプリケーションの実行
・Wait(2秒)
・キーの送信(F5)
 
 ノートPCの性能の問題でアプリケーションの起動に2秒以上かかったのが原因でF5キーの送信が早すぎたのだ予想。
 フローのコードは以下。
 
System.RunApplication ApplicationPath: $'''C:\\Program Files (x86)\\Microsoft Office\\root\\Office16\\POWERPNT.EXE''' CommandLineArguments: $'''/C \"C:\\Users\\macni\\Desktop\\202103251826_Power Automate Desktop入門.pptx\"''' WindowStyle: System.ProcessWindowStyle.Normal ProcessId=> AppProcessId
WAIT 2 
MouseAndKeyboard.SendKeys TextToSend: $'''{F5}''' DelayBetweenKeystrokes: 10 SendTextAsHardwareKeys: True
 
 1行目はパワーポイントを/Cのオプション付きで起動しています。/Cはファイルを指定してパワーポイントを起動するオプションです。
 パワーポイントのパスや、実行するパワポのファイルパスは書き換えて使用してください、
 
 3行目はF5キーを送信しています。F5キーは特殊なキーなのでフローを作成する際には「マウスとキーボード > キーの送信」の設定で「特殊キーの挿入 > ファンクションキー」から選択してください、
 

DEMO : 03 変数を用意してプラグラミングっぽく扱う

 
 
 
 変数を作成して、foreachでリストを処理したり、テキストに書き込んだりします。
 
・変数の設定
・新しいリストの作成
・項目をリストに追加
・項目をリストに追加
・For each
・テキストをファイルに書き込みます
・For each(End)
 
  ファイルの書き込みがサクッとできるのは良いですね。
 
 コードは以下です。6行目のファイルの書き込み先は適宜書き換えてください。
SET StringValue TO $'''サンプル'''
Variables.CreateNewList List=> ListValue
Variables.AddItemToList Item: StringValue List: ListValue NewList=> ListValue
Variables.AddItemToList Item: $'''テスト''' List: ListValue NewList=> ListValue
LOOP FOREACH CurrentItem IN ListValue
    File.WriteText File: $'''C:\\Users\\macni\\Documents\\hoge-%CurrentItem%.txt''' TextToWrite: CurrentItem AppendNewLine: True IfFileExists: File.IfFileExists.Append Encoding: File.FileEncoding.Unicode
END
 5行目のLOOP FOREACHで取得したリストの要素を、6行目のファイル名で利用しています。

 このフローを実行するとhoge-サンプル.txtとhoge-テスト.txtというファイルがドキュメントフォルダーに作成されます。
 

DEMO04 : エラー処理

 
 開発する際にエラーの処理方法をまず把握するのが大事、ということでエラー処理について簡単なサンプルを作成しました。
 「エラーの補足」「エラー情報のファイル書き込み」「エラーをポップアップメッセージで表示」この辺の処理が試せるサンプルです。
 
 フローは以下の画像の通り。
 
 
 エラーは4行目で、1行1列から始まるExcelの存在しない0行0列に書き込みを行い、発生させています。
 
 3行目の「ブロック エラー発生時」はオプションでエラー発生時に「フロー実行を続行する」を指定しています。ブロック以降でエラー内容をファイルに書き込んだり、メッセージを表示するために処理を続行します。
 
 
 ちなみにブレークポイントを使って処理を途中で停止、変数の中身を確認することもできます。なかなか多機能。
 
 コードは以下。
 
# 操作できない行を操作してエラーを出す
Excel.Launch Visible: True LoadAddInsAndMacros: False Instance=> ExcelInstance
BLOCK sample
ON BLOCK ERROR
    NEXT ACTION
END
    Excel.WriteCell Instance: ExcelInstance Value: $'''throw error''' Column: 0 Row: 0
    ERROR => LastError
END
File.WriteText File: $'''C:\\Users\\macni\\Documents\\PowerAutomateDesktopErrorSample.txt''' TextToWrite: LastError AppendNewLine: True IfFileExists: File.IfFileExists.Append Encoding: File.FileEncoding.Unicode
Display.ShowMessage Title: $'''エラー発生''' Message: LastError Icon: Display.Icon.None Buttons: Display.Buttons.OK DefaultButton: Display.DefaultButton.Button1 IsTopMost: False ButtonPressed=> ButtonPressed
 

DEMO05 : Excelを操作

 
 業務ということでExcelファイルを操作してみました。
 
 
 Excelを起動し新規ワークシートに値を書き込み、別のExcelにその値をコピーするというサンプルです。
 フローを見てもらえれば処理は理解できると思います。
 「Excelワークシートから読み取り」でデータを変数に読み取る際には開始行列、終了行列を指定する必要がありますが、書き込みは開始行列だけでOKです。
 
Excel.Launch Visible: True LoadAddInsAndMacros: False Instance=> ExcelInstance1
SET i TO 0
LOOP WHILE (i) < (6)
    Excel.WriteCell Instance: ExcelInstance1 Value: i Column: 1 Row: i + 1
    Variables.IncreaseVariable Value: i IncrementValue: 1 IncreasedValue=> i
END
SET i TO 0
Excel.Launch Visible: True LoadAddInsAndMacros: False Instance=> ExcelInstance2
Excel.ReadCells Instance: ExcelInstance1 StartColumn: 1 StartRow: 1 EndColumn: 1 EndRow: 10 ReadAsText: False FirstLineIsHeader: False RangeValue=> ExcelData
Excel.WriteCell Instance: ExcelInstance2 Value: ExcelData Column: 2 Row: 1
 
DEMO06 : サブフローの実行
 
 Power Automate Desktopではメインのフロー以外にサブフローを作成してメインフローから呼び出すことができます。
 長いフローをサブフローに分けておけば可読性が良くなります。
 
 サブフローを呼び出すコードは以下。
 
CALL Subflow_1
 

次はPower Automateと連携させたい

 
 今回はそこまで解説できなかった&Power Automateのトライアルが1か月(延長でプラス1ヵ月)しかないので、別の機会を貰って.NETラボ勉強会で「Power AutomateからPower Automate Desktopのフローを呼び出してみた」というお話をしたいと思います。