Power Automateでファイルを自動整理(OneDrive)

Document

Power Automateでファイルを自動整理(OneDrive)

以前Power Automateで添付ファイルを自動保存する(Outlook)という記事で、Outlookで受信した添付ファイルを自動でOneDriveに保存するフローをPower Automateで作成しました。
これをセットしておくことで、今まで手動でファイルに保存していた作業が省略されて効率化ができています。しかし、受信頻度の高いフォルダなどを指定している場合には、気づくとフォルダ内のファイルが大量に保存されていて、どれが今回のファイルなのか分かりにくくなるという課題もあるのです。(まさしく私の環境)
なので今回は、OneDrive上のフォルダを期間ごとに自動整理するフローを紹介したいと思います。サンプルは1週間分で作成しますが、ご自身の環境に合わせて期間は設定してください。


フローの作成

今回整理後のフォルダはフロー上で作成するため事前の準備は不要です。
ただ整理対象のフォルダとバックアップ先のファイルを決めておく必要があります。私は下記のパスを対象にしていきます。
〇整理対象のファイル

〇整理後の保存先

では早速フローを作成していきましょう。
今回は一定のタイミングで実行するフローのため、「スケジュール済みクラウドフロー」を選択します。
フロー名や、開始日、繰り返し期間は書きのように入力しておきます。

  1. トリガーの設定
  2. 先ほど「スケジュール済みクラウドフロー」を選択し、設定をしたため基本となる設定はできております。ですが、細かい調整が必要なので下記のように設定値を変更しておきます。

  3. 現在時刻と過去の時刻取得
  4. 今回はフォルダ名に日付を入れるため「現在の時刻」のステップで取得しておきます。
    なお今回私はフォルダ名を「20220131-20220206」とするため、6日前の日付も必要になります。そういう時は「過去の時間の取得」を使用します。
    それぞれの設定値は下記になります。

  5. タイムゾーンの変換
  6. 先ほどのステップで取得した時刻は全て(UTC)協定世界時で取得してしまうため、日本の時間に合わせるにはタイムゾーン変換が必要になります。
    「現在の時刻」と「過去の時間の取得」それぞれで変換を行います。

  7. 整理対象のファイルリストを取得
  8. いよいよ本題のファイルリストを取得します。
    今回私はOneDrive上のファイルを対象にするため、OneDriveのステップを使用しますが、Sharepointなどを対象にする場合は適宜変更をしてください。

    OneDriveから「フォルダー内のファイルのリスト」を選択し、下記のように対象のフォルダパスをします。

  9. ファイル作成と元ファイルの削除
  10. 対象のファイルリストを取得できたら、パスを使用してファイルのコンテンツ(データ)を取得します。
    先程のステップではあくまで「パス」しか取得できていないのでデータを取り出します。
    なおここからの処理は取得したリストのパス数で繰り返し処理を実装しています。後述する「パスによるファイルコンテンツの取得」のステップで自動的に組み込まれるので特に設定はしません。

    1. ファイルコンテンツを取得する
    2. OneDriveの「パスによるファイルコンテンツの取得」を作成。先程取得した「パス」を設定します。すると自動的に「Apply to each」が作成され、ステップが内部に組み込まれると思います。

    3. ファイルの作成
    4. 取得したコンテンツファイルで、移動先のフォルダにファイルを作成します。
      OneDriveの「ファイルの作成」を使用するのですが、今回整理フォルダ自体も自動的に作成させたいので、「フォルダのパス」欄を工夫します。
      通常、入力欄の右にあるフォルダアイコンをクリックして、対象のパスを選んでいくと思いますが、これでは現在作成されていないパスを指定することができません。なので一旦作成済みのパスまでを選択して入力させます。

      上記のように入力できたら、作成するファイル名を手入力します。
      しかし、すでに入力済みのパスの後ろに文字列を追加しようとしても消えてしまったり、うまく入力できない状態になるかと思います。なぜこのような動作になるかは把握できていないのですが、自動入力分のパスに手動入力を組み合わせるのはできないようです。(頑張ればできますが。。)
      なので、今回は関数を使用して新規作成のフォルダ名をくつけたいと思います。

      使用する関数は「concat」関数です。
      この関数は引数に指定した文字列をくつける事ができる関数になります。これを利用してファイル名を接続します。
      まずは入力済みのパスの後ろにカーソルを当てクリック。すると「動的なコンテンツ」や「式」というタブがあるポップアップが表示されるので、「式」タブを選択。
      入力欄にconcat()と入力し、「()」の中に結合したい文字列をカンマ区切りで入力していきます。なおさらに文字列を返す関数を入力することも可能です。今回私は下記のように入力しています。

       concat('/',formatDateTime(body('過去の時間の取得'),'yyyyMMdd'),'-',formatDateTime(body('タイム_ゾーンの変換'),'yyyyMMdd'))
                          
      これで「yyyyMMdd-yyyyMMdd」という名前のフォルダを作成して、対象のコンテンツファイルを保存することができます。
      なお、このパスでエラーなる場合、フォルダ名の前に「//」となってしまうことがあります。その場合はconcat内の「/」を削除するか、入力欄のconcat関数の前についている「/」を削除してください。
      ごくまれに、自動的に「/」が保管されることがあるようです。。この記事を作成中にもありました。。。

      あとは、「ファイル名」「ファイルコンテンツ」を指定して完了です。

    5. 元のファイルを削除する
    6. 移動先にファイルを作成することができたら、元のファイルを削除しておきましょう。
      OneDriveの「ファイルの削除」を選択します。入力するのはファイルを一意に定めるIDです。なのでファイルリストを取得した際の「ID」で良いです。
      なお、ここにパスやコンテンツを指定してもいけそうな気がしますが、エラーになります。。気をつけましょう。

    「Apply to each」の中の全容は下記になります。

これでフローは完成です。


テストしてみる

先程作成したフローを実際に動かしてみましょう。
本来であれば、対象ファイルに添付ファイルが複数ある状態ですが、今回はテストなのでファイルは2つのみで試します。
対象ファイルの中身は下記になります。

なお移動先のフォルダ状況は下記になります。
実施日は2022/2/6です。なのでフォルダ名は「20220131-20220206」になります。現在はそのファイル名はないので新規作成されてファイルが移動される想定です。

では、フローからテストを実行します。
移動先のフォルダを見ると、新規でフォルダが作成されていますね。中身をみても対象のファイルが2つ保存されています。

最後に元のフォルダを見ていると、ファイルが無くなっているので正しく削除できています。

ということで、作成したフローは問題なく稼働することが確認できました。


最後に

今回はフォルダ内のファイルを自動で整理するフローを作成しました。
日付名のフォルダを作成して、移動させることができるので、溜まり続けるフォルダがある人は是非このフローを導入してみてください。
今回はこの辺で、ではまた。

コメント

このブログの人気の投稿

PowerAppsで座席表を作成する

Power AutomateでTeamsのキーワードをトリガーにする

Power Automateで文字列抽出