Power Automateについて詳しく解説します
- Power Automate Desktopでファイルの更新日時を取得したい
- 取得した更新日時を使った業務効率化を知りたい
当記事では、上記の疑問にお答えします。
Power Automate Desktopでフォルダー内のファイルを取得すると様々な要素が取得できます。
ファイル名はもちろん、ファイルパスや作成日時、更新日時などが取得できます。
しかし「そんな要素を取得して一体何に使うの?」と思う方もいるのではないでしょうか。
当記事では、ファイルの更新日時を取得する方法を解説し、応用として更新日時を利用した資料の作成方法を解説いたします。
ぜひ一度読んでみてください。
あわせて読みたい
目次
著:やまもとてつや
Tipstour初の電子書籍化! 37歳で初の正社員となりITヘルプデスクとして勤務中の著者が、Power Automate Desktopを使った8つのメール作業・自動化事例とその方法を本書でご紹介しています。 これを読めば、ヘルプデスクの担当者はもちろん、WindowsPCで作業するすべてのワーカーの面倒なメール作業を自動化可能です。 Kindle Unlimitedで読み放題対象! |
【前提】ファイルの更新日時はフォルダーアクションから取得できる
ファイルの更新日時はフォルダーアクションにあるフォルダー内のファイルを取得から取得可能です。
取得後は変数Filesが生成され、FilesにあるLastModifiedプロパティを使えば更新日時を取得できます。
一度For Eachで変数をCurrentItemに変えないと、Excel等に転記はできないので注意してください。
実際に更新日時を取得して、Excelに転記してみましょう。
下記画像のように、フォルダー内にファイルがあったとします。
新しいフローを作成したら、フォルダーアクションにあるフォルダー内のファイルを取得をドラッグ&ドロップしてください。
画面が変わったら、フォルダー欄に該当のフォルダーを選択して保存します。
生成された変数としてFilesが生成されたのを確認しましょう。
次にExcelアクションにあるExcelの起動をドラッグ&ドロップしてください。
画面が変わったら、そのまま保存します。
更新日時を転記するため、ループアクションのFor Eachをドラッグ&ドロップしてください。
画面が変わったら、反復処理を行う値欄に%Files%と入力します。
保存先欄にCurrentItemという変数が生成されました。
For EachとEndの間にExcelアクションのExcelワークシートから最初の空の列や行を取得をドラッグ&ドロップします。
画面が変わったら、そのまま保存してください。
変数が2つ生成されますが、今回はFirstFreeRowのみ使います。
最後に、ExcelアクションのExcelワークシートに書き込むをドラッグ&ドロップします。
画面が変わったら、以下のように入力して保存してください。
- 書き込む値:%CurrentItem.LastModified%
- 列:2
- 行:%FirstFreeRow%
できたら、フローを実行します。
更新日時が取得できました!
他のアクションについては下記の記事でも詳しく解説しています。
【応用①】ドキュメント管理表に更新日時を加える
前回の記事の応用操作で作ったドキュメント管理表の5列目に、更新日時を加えてみましょう。
前回の記事を読んでいない方は、下記の記事をお読みください。
前回のフローに更新日時を転記するフローを追加してみます。
ExcelアクションにあるExcelワークシートに書き込むをEndの前にドラッグ&ドロップしましょう。
画面が変わったら、以下のように入力して保存してください。
- 書き込む値:%CurrentItem.LastModified%
- 列:5
- 行:%FirstFreeRow%
しかし、これでは転記した更新日時に時刻も入ってしまうので、月日のみを入力させるようにします。
8と9の間にテキストアクションのdatetimeをテキストに変換をドラッグ&ドロップしてください。
画面が変わったら、以下のように入力してください。
- 変換するdatetime:%CurrentItem.LastModified%
- 使用する形式:標準
- 標準形式:短い日付形式
生成された変数としてFormattedDateTimeが生成されますが、何を表しているのかがわかりにくいので、LastModifiedに変更しました。
保存後は、先程作ったExcelワークシートに書き込むの書き込む値を今作成した変数に変更するのを忘れないでください。
更新日時が入力されました!
作成したフローの前半部分です。
後半は下記になります。
少し長いので、For Each内の処理をサブフローとして管理するのもアリです。
【応用②】更新日時が変わったらバージョンを増やし、ファイル名を変更する
今度はドキュメント管理表にある作成日時と更新日時が違う場合に、管理表にあるバージョン数を変更しながらバージョン数を加えたファイル名として保存してみましょう。
上記作業により管理表とファイル名とで、常にバージョンが一致します。
以下が具体的なプロセスです。
- ドキュメント管理表にあるファイル名や作成日時、更新日時を読み取る。
- 読み取った管理表の更新日時とファイルの更新日時が違う場合に管理表のバージョン数を更新する。
- 更新したバージョン数をファイル名に加えて保存する。
フォルダー内には下記のようなファイルが入っています。
管理表は応用①で作成したものにバージョン数を加えたものを使います。
手順は6ステップと少し長めですが、ぜひ挑戦してみましょう。
【ステップ①】ファイル取得やExcel起動などの下準備をする
下準備としてフォルダー内のファイルの取得やExcelの起動、変数の設定を行います。
フォルダーアクションにあるフォルダー内のファイルを取得をドラッグ&ドロップしてください。
画面が変わったら、フォルダー欄に該当のフォルダーを入力して保存しましょう。
生成された変数としてFilesが設定されたのを確認します。
次にドキュメント管理表を開くため、ExcelアクションにあるExcelの起動をドラッグ&ドロップしましょう。
画面が変わったら、Excelの起動欄を次のドキュメントを開くに変更し該当のExcelファイルを選択して保存します。
最後に変数アクションから変数の設定をドラッグ&ドロップしてください。
画面が変わったら、値欄に4と設定します。
4はドキュメント管理表に最初にファイル名が記載されている行数です。
後に設定するFor Each内で変数を増やせば、常に同じ行で転記するのを防げます。
生成された変数として、NewVarが生成されたのを確認しておきましょう。
【ステップ②】For Eachアクションを設定する
下準備が終わったら、ループアクションにあるFor Eachをドラッグ&ドロップしてください。
画面が変わったら、反復処理を行う値欄に%Files%を入力して保存します。
生成された変数としてCurrentItemが生成されました。
CurrentItemにプロパティを設定すれば、更新日時を転記できます。
【ステップ③】ドキュメント管理表から各種データを読み込む
ドキュメント管理表から各種データを読み込みます。
読み込むデータは以下の3つです。
- 拡張子のないファイル名
- 更新日時
- バージョン数
1つ目と3つ目はファイル名を作成するために作成し、2つ目の更新日時はファイルの更新日時と異なった際にバージョン数を増やすための条件として使います。
全てExcelアクションのExcelワークシートから読み取るで取得可能です。
今回のフローは少し長いので、サブフローに分けてみます。
左上のサブフローをクリックし新しいサブフローをクリックしてください。
画面が変わったら好きなサブフロー名を入力します。
今回はExcelから各種データを読み取るに変えました。
保存すると、自動でサブフローの作成画面に移るので中身を作ってみましょう。
ファイル名を取得するため、ExcelアクションのExcelワークシートから読み取るをドラッグ&ドロップしてください。
画面が変わったら、以下のように入力します。
- 取得:単一セルの値
- 先頭列:2
- 先頭行:%NewVar%
生成された変数をFileNameに変更しておきましょう。
残りの更新日時とバージョン数も同様に取得するには、それぞれ先頭列を5と6に変えればOKです。
変数名も更新日時はLastModifiedDate、バージョン数はVersionNumberに変更しました。
ここまで入力するとサブフローの中身は、以下のようになります。
作成後、Mainに戻りフローコントロールアクションからサブフローの実行をFor Eachの下にドラッグ&ドロップします。
画面が変わったら、設定したサブフロー名を選んで保存しましょう。
【ステップ④】ifを使って更新日時で処理を行うか否かを分ける
今回のフローの目的は、該当のファイルと管理表とで更新日時が異なる場合にファイル名を変更することです。
異なる場合は処理をして、そうでない場合に処理をしないようにするにはifを使います。
条件アクションにあるifを、サブフローの実行の下にドラッグ&ドロップしてください。
画面が変わったら、以下のように入力します。
- 最初のオペランド:%LastModifiedDate%
- 演算子:と等しくない(<>)
- 2番目のオペランド:%CurrentItem.LastModified%
最初のオペランドが管理表の更新日時、2番目のオペランドがファイルの更新日時です。
この2つが異なっている場合にif内の処理が行われるようにします。
【ステップ⑤】if内の処理を加える
if内で作成する処理は以下の3つです。
- バージョン数を大きくして、管理表に書き込む
- ドキュメント管理表の更新日時をファイル名の更新日時に書き換える
- ファイル名と更新したバージョン数とを加えたファイル名に変更する
if内の処理も少し多いため、サブフローを作成します。
今回はExcelに更新日時とバージョンを書き込み、ファイルを保存するにしました。
バージョン数を増やして転記する
まずはバージョン数を増やして転記しましょう。
変数アクションにある変数を大きくするを作成したサブフロー内にドラッグ&ドロップしてください。
画面が変わったら、以下のように入力して保存します。
- 変数名:%VersionNumber%
- 大きくする数値:0.1
次にExcelアクションのExcelワークシートに書き込むをドラッグ&ドロップしてください。
画面が変わったら、以下のように入力して保存します。
- 書き込む値:%VersionNumber%
- 列:6
- 行:%Newvar%
更新日時をドキュメント管理表に転記する
次にファイルの更新日時をドキュメント管理表に転記します。
更新日時はそのまま転記すると時刻も入ってしまうため、先にテキストアクションにあるdatetimeをテキストに変換をドラッグ&ドロップしてください。
画面が変わったら、以下のように入力します。
- 変換するdatetime:%CurrentItem.LastModified%
- 使用する形式:標準
- 標準形式:短い日付形式
生成された変数としてFormattedDateTimeが生成されたのを確認します。
転記にはExcelワークシートに書き込むを使い、以下の項目を入力して保存します。
- 書き込む値:FormattedDateTime
- 列:5
- 行:%NewVar%
ファイル名を更新する
最後にファイル名を更新しましょう。
ファイルアクションにあるファイルの名前を変更するをドラッグ&ドロップします。
画面が変わったら、以下のように入力してください。
- 名前を変更するファイル:%CurrentItem%
- 新しいファイル名:%FileName%_%VersionNumber%
- ファイルが存在する場合:何もしない
まず対象のファイルはCurrentItemで指定できます。
新しいファイル名を上記のように入力すると、以下のようにファイル名を更新できます。
入力が終わったら保存します。
これでサブフロー内の処理は全て入力しました。
メインのifアクションの間にフローコントロールアクションにあるサブフローの実行をドラッグ&ドロップしてください。
画面が変わったら、サブフローの実行欄に作成したサブフロー名を入力して保存します。
【ステップ⑥】後処理をする
最後にifアクションのEndの後に変数アクションにある変数を大きくするをドラッグ&ドロップします。
画面が変わったら、下記のように入力して保存してください。
- 変数名:%NewVar%
- 大きくする数値:1
これで管理表の行数が増えるので、常に同じ行に処理するのを防げます。
最後にFor EachのEndの下にExcelアクションのExcelを閉じるをドラッグ&ドロップしてください。
画面が変わったら、Excelを閉じる前欄をドキュメントを保存に切り替えて保存します。
ここまで作成するとMainフローは以下のようになります。
Excelからデータを読み込む際のサブフローの中身です。
ifアクション内のサブフローは下記のとおりです。
実行すると、ドキュメント管理表が更新されました。
ファイル名は下記のようになります。
ファイル名が変更され、ドキュメント管理表も更新できました。
まとめ
以上、ファイル名の更新日時を取得する方法を解説しました。
更新日時を取得する方法自体はとてもカンタンですが、実際どんな処理に応用すればいいかわからないものです。
今回はドキュメント管理表のバージョン管理を応用として紹介しましたが、アイディア次第でもっとスゴい処理もできるようになります。
今回の応用を起点として、ぜひいろんな処理に挑戦してみてください。