パスワードを取得する汎用フロー

パスワードをExcelに保存してそれを取得するフローの作成とそのフローの外部フロー化として汎用性をあげる方法について

PowerAutomateDesktopでWebアプリやサービス等を自動化するフローは、だいたい最初に想定することかもしれません
そこで重要となってくるのがログインアカウントとパスワードの取得です
基本的にはテキスト入力のアクションのプロパティに設定しても良いのですが、パスワードが定期的に変更が必要だったり、強制的に数か月経過すると変更が必要となるものもあります

そんな時にいちいちAutomateのプロパティを編集するのも面倒です
しかも1つなら大して問題にはなりませんが、これが複数あった場合かつそれも複数のフローになっていた場合は非常に面倒です

そこで利用したいのがExcelです
Excelにアカウント名とパスワードを一覧として保存しておきます
そして必要なアカウント情報を取得しに行ってそれをAutomateに入力をしてもらいます

こうすることにより、Excelファイル1つで必要なアカウント情報を一元化できかつ編集も楽になります
またセルの位置さえ変動しなければ、フローへの影響もなく
関連するフロー全てに対して有効に出来ます

さらにこの記事中ではそのフローを別フローとして保存して実行することで、あらゆるフローから汎用的に利用できるようにしています

実際に作成してみる

パスワードファイルを開く

最初のアクション追加

最初のアクションはExcelファイルを開く操作になります
Excelファイルを直接開くには「Excelの起動」アクションから行えます
このアクションをダブルクリックします

Excelの起動アクションのプロパティ設定画面

プロパティ設定を上から順番に行います

まずは起動時の動作の「Excelの起動」ですが、ここは選択肢から「次のドキュメントを開く」を指定します
これで2つ目のドキュメントパスの指定が可能となりますので、パスワードファイルをダイアログから選択してください
これでフルパスの入力が行われます

基本的に目的に対してはこの2つの設定を行えば十分ですが、さらに以下の設定も行っておきます

「インスタンスを表示する」はオフにする
セルデータが欲しいだけなので表示する意味が無いからです
後述しますが場合によってはファイルのデータ閲覧を防ぎたい場合にも有効です

「読み取り専用として開く」はオンにする
これもインスタンスを表示しないのでどちらでも良いのですが、自動化処理の場合には編集しないならなるべくこの設定を行っている方が良いですね
自動処理というのはスケジュールやなんかでいつ発生するか分からないので、編集したいときに実行されてると迷惑です

詳細項目の「パスワード」はExcelの標準機能の読み取りパスワードの文字列です
これはこのファイルにあるデータはアカウント情報やパスワード情報という観点からファイル自体にパスワードを設定して、だれでも閲覧できるようにしたくない場合に設定して、フローで開く場合にはここでパスワードを指定することになります

前述にあるようにこの閲覧制限をしたいファイルを利用する場合はインスタンス表示(Excel表示)をしない方が良いですね

最後に保存ボタンをクリックしてアクションの作成完了です

セルの値を取得する

まずはファイルの中身を先に説明します

ファイルのデータ

このように特に見栄えは全く考慮する必要もなければ、A列にアカウント名、B列にパスワードとします
別のアカウント情報は改行して入力を行っていきます
ここは別にこれと同じでなくても、データがどこにあるか分かれば問題ないです
このデータをフローに取得してもらいます

そして取得アクションの前にもう1点設定を行っておきます
それは入出力用変数の設定です

前述しましたが、このフローは別のフローから外部呼出しを可能とすることを目的にしています
なので別のフローからどのアカウント情報が欲しいかを入力変数、取得した情報を出力変数として代入する必要があるためです

変数の設定画面

Automateの画面左側上部に変数のウィンドウがあります
もしこのウィンドウが表示されていない場合は、閉じる×ボタンのすぐ下の「{x}」というボタンをクリックすると表示されます
ちなみに{x}というのはAutomateでの変数の表現となります
他にも利用可能な場面で表示されています

そのウィンドウ上部の入出力変数の範囲から+ボタンをクリックしてさらに「入力」を選択します

入力変数の設定画面

変数の設定画面が表示されます
基本的に変更の必要も無いのですが、そのままで分かりにくい場合はそれぞれの項目を任意のものに設定を行います
ちなみに、データの種類は選んだら分かりますが数値型とかは無いのでテキストで問題ありません
そもそもAutomateではあまり変数の型は意識が必要ないです

また、選べる項目に機密テキストがありますが、これはこのフロー上でも確認が不可能になる暗号化されたものに利用します
これは別途アクションが必要になるのでまた別のお話とします

最後に作成ボタンをクリックして作成を完了させます

入力変数の作成時と同様の画面で今度は出力変数の作成を行います
これがフローで取得したアカウント名とパスワードを格納して返す変数です
ここではアカウント名とパスワードの2つの出力変数の作成を行ってください

まとめて取得してリストとして1つの変数で返すことは可能ですが
このフローの目的からするとまず間違いなく呼び出し元ではアクションがそれぞれ別のアクションで変数を利用します
連続したデータであるよりは、別々の変数の方が利用しやすいです

出力変数の作成

変数名と外部名を任意に指定して作成します
ちなみに、この変数名と外部名に関しては後でフロー呼び出しの解説で説明します

変数の作成完了した状態

画像の様に入出力変数が3つ作成された状態となれば、準備完了です

アクションの選択

実際のデータの取得アクションを作成します
アクションはExcelの起動の下にある「Excelワークシートから読み取り」を使用します
ダブルクリックすると設定画面が表示されます

アクションのプロパティ設定画面

Excelインスタンスと取得は初期上のままで問題ありません
もし違っていたら画像の様に設定してください

このアクションではアカウント名を取得したいので、先頭列は「1」を指定します

次の先頭行は先ほど作成した入力変数を指定します
変数を利用する場合は、入力ボックスの右側にある変数ボタンをクリックします
画像の様に変数の選択画面が表示されますので、そこから作成した入力変数を選択します

代入先の選択

次に詳細項目内の「セルの内容をテキストとして取得」を有効にします
しなくてもほぼ問題は無いとは思いますが、アカウント名とパスワードが数値であることは無いと思います

最後に生成された変数項目内で取得したデータの格納先を指定します
初期状態ではローカル変数になっているので、変数ボタンをクリックして出力変数を指定します

最後に保存ボタンをクリックして作成完了です

2つ目の取得アクション

同手順で2つ目のパスワードを取得するアクションを作成してください
設定は画像のような形で設定します
先頭列が「2」になっていることに注意してください

パスワードファイルを閉じる

取得が出来たらパスワードファイルは閉じます

閉じるアクションの選択画面

画像の「Excelを閉じる」を使用します
これをダブルクリックしてください

Excelを閉じるアクションのプロパティ設定画面

特に設定を変更する必要はありません
保存ボタンをクリックして作成してください

フローの全体

完成すると画像のような4ステップのフローが完成します
途中の読み取りアクションでは出力変数に代入しているので特に返し値を意識する必要はありません

完成したらフローを保存してください
このフローは入力変数である引数が必要になるので動作確認は別フローで行います

フローの動作確認

別のフローを新規に作成してください

別フローの実行アクションの選択画面

別のフローを実行するアクションはフローコントロール項目内の「Desktopフローを実行」を使用します
これをダブルクリックしてください

アクションのプロパティ設定画面

先ほど作成したフローをリストから選択します
ここでは「PasGet」を選択しています

設定完了状態

フローを選択すると自動的に同期されて、入力変数が作成されたフローであれば設定画面に自動的に表示されます
ここに任意のデータを入力します

また前述にて後ほど説明するといっていました、入出力変数の外部名ですが
ここに初期状態で表示された変数名がそれに一致する事になります
なので基本的にはどちらも同じものを利用している方が分かりやすいです

作成完了状態

アクションを作成すると画像の様に1ステップのアクションが作成され、フロー変数が自動的に作成されます

呼び出し元としてはこれだけで取得フローを実行して返し値を受け取る事ができます
これを実際に実行してみます

実行後の画面

こちらが実際に実行した後の画面です
フロー変数に指定した行のアカウント名とパスワード文字列が取得されていることが確認できます
入力変数には「2」を指定したので、Excel2行目の情報が取得されています

この様に外部フローとして汎用的に取得処理を作成することで、パスワードの変更等があった場合でもフローの修正が必要なくなります
行数を変更さえしなければですが…

サブフローよりもさらに強力に汎用性を上げることの出来る外部フローの呼び出しを有効に活用しましょう