背景
ドキュメントの発番や承認など、社内システムを使わなくてもいけないことも多いのではないでしょうか。
私の勤め先では、国産のとあるシステムを使いドキュメントの発番や承認をしていますが、APIなし・CSVインポート不可のため、開発プロジェクトに必要なドキュメントを1時間かけて発番する作業が必要でした。
文字サイズも変更できず、発番処理だけで目と肩がバキバキになります。
Power Automate Desktopが無償で提供されるようになり、この悩みから開放されるのでは!?と期待し、ドキュメントの発番作業を自動化してみました。
Power Automate Desktopについて
元々、Microsoft 365の1つとしてPower Automate という自動化機能ががありましたが、クラウド上のアクティビティのみでした。
これをWindows上の操作も含めて自動化してくれるものです。今後Windows 10の標準機能として組み込まれるそうです。
古くはUWSCがありましたが、プログラミング記述が必須のため多くの人が使うにはハードルが高いものでした。Power Automate DesktopはGUIで自動操作を設定でき、プログラムができない人も導入しやすくなっています。
まだプレビュー版のためか、フローのエクスポートができないなど改善してほしいものはありますが、生産性向上には十分期待できるアプリではないかと思います。
システム操作を自動化
CSVファイルに記載したドキュメントを行ループしながらシステムで発番できることを目指します。
大きく、「システム操作の再現」と「入力する情報を外部に保持&ループ」させる処理が必要です。
システム操作の再現
まずは、固定値を使いシステムに対しての操作を再現できるか確認してきます。
この操作はそれぞれの環境に依存するため一概に必ずできるとは言えないのですが、後述の「上位オブジェクトにフォーカス+コピペ」を活用するのは多くのシステムで有効そうです。
当初、デスクトップレコーダーでやれると思いましたが、クソシステムの以下の仕様のためレコーダーの処理のみでは操作の再現が不能でした。オブジェクトが複雑な場合、再現できない場合がありそうです。
一方で、チェックボックス・ボタンなどのクリック処理はレコーダーで問題ありませんでした。
- 毎回、テキストボックスのIDがランダムで変更される。
- ドロップダウンの項目を動的に取得できない。
「レコーダーでGUIオブジェクトを取得→クリップボードに所望の値を保存→Ctl+V」によりデータ入力が実現できました。
入力する情報を外部に保持&ループ
これはシステムに依存せず普遍的に使えるテクニックではないでしょうか。
データテーブルとFor Each処理はやはり相性が良いです。
まずは、発番したいドキュメントの情報(ドキュメント名など)をデータテーブル型としてフロー内に読み込ませます。
データテーブルはCSV,Excel,SQLなどからインポートすることができますが。このあたりは、Microsoft 365のシステムを導入しているとより多くのものを自動化できる箇所ではないでしょうか。
その後、For Each処理でテータテーブルをループさせ、上述のクソシステムに対しての操作を実行していきます。
CSVからのデータのインポート
これは非常に簡単で「CSVを読み取ります」を追加するだけです。
これで、CSVTableという変数内にCSVファイルの情報が保存されるようになります。
ループ処理内でのデータの参照
- For eachを追加します。反復処理の対象としてCSVTableを設定すると、全行ループしてくれます。つまり、CSVファイルが100行あれば100回ループします。
- CurrentItemという変数が追加されています。これは1回目のループならCSVファイルの1行目、2回目のループなら2行目のデータが格納されています。これを使いデータを動的に変更してきます。参照されているCurrentItemデータはメッセージを表示することで確認できます。
- クリップボードに設定する値をCurrentItemに変更し、ダイナミックなデータ参照とシステム操作との組み合わせます。
まとめ
以下の組み合わせでクソシステム業務の負荷をほぼ0にすることができました。
- 再現が不能な操作は上位オブジェクトにフォーカス+コピペで対応できる場合がある。
- データテーブルとFor eachの組み合わせで一括処理
これを参考に生産性の低い業務から開放される方がいれば幸いです。