PowerAutomate|Excelの更新後ファイルコピーしても反映されていない時の対処法
PowerAutomateでExcelの更新アクションをしたのちに
そのファイルに対して何かしらのアクション(ファイルを送信やコピーなど)を行う場合に、更新が反映されずに次の処理が走ってしまう場合があります。
この記事では、このような時にどう対処すれば良いのか。その原因と解決法を紹介いたします。
目次(クリックで読みたい部分にジャンプできます)
【事象の概要】先に行なっているExcelの更新が次の処理に反映されていない。
PowerAutomateで次の処理を行なっているとしましょう。
行の更新を行った後に、ファイルをコピーしています。
この場合、コピーしたファイルには行の更新が反映されていません。
「え。先に処理を行なっているはずなのになんで?」
と思うかも知れませんが、PowerAutomateで上記のような実装をするとコピーしたファイルには反映がされないのです。
ファイルコピーではなく、同じファイルに対して変更などをする場合には問題ありませんよ!
【事象の原因】Excelの更新処理が完了する前にPAで次の処理が走っている。
では事象の原因です。
事象の原因は、「行の更新処理」が終わっていないけど、次の処理に入ってしまっていることが原因になります。
より詳しくいうと、Excelファイルの行の更新には、処理を開始して実際にExcelファイルが反映されるまでにはタイムラグがあり、その終了をPowerAutomateでは認識することができないのです。
これが原因で、ファイルコピーの処理が先に走ってしまい、コピーされてから実際に反映されるということが起こっています。
初めてこの事象に出会うと「あれなんで!?」とビビりますね笑
【解決策1】待ち時間を設定する(根本解決策ではない)
では、簡単な方の解決策から紹介します。
それは、単純に「待ち時間」を設定することです。
待ち時間を設定することで、Excelファイルが更新されるのを待つことができ、通信の問題などが発生しなければ問題なく処理されます。
行の更新やCopyFileの実行時間は、1秒以下ですので、5秒ほど余裕を持っておけば問題ないでしょう。
待ち時間の設定方法
待ち時間は「遅延」と検索することで設定することができます。
スケジュールの遅延です。
ただ、注意して欲しいのが、うまくいかない可能性もあるということです。
Excelが想定外の原因で更新が遅れてしまった場合に、待ち時間を超えてしまう場合が考えられます。
そうすると、この処理には穴があることになりますね。
【解決策2】更新時間からファイルが更新されたかどうかを判断する。
では、次の方法です。
今度は、対象のExcelファイルの更新時間から
ファイルが更新されているかどうかを判断し、更新された時に次の処理に行く という条件式を組むことにしましょう。
こうすることで、ファイル更新されたのちに、次の処理(ファイルコピーなど)を行うことができ、確実に反映させることができます。
処理の全体像
各要素の解説
スコープで囲う
まず最初の囲いですが、これはコントロールの「スコープ」を用いています。
ただ、こちらはなくても動作には関係ないので、わかりやすければ用いてください。
更新する前のExcelファイルのプロパティを取得
次に、Excelファイルの更新時間を取得します。
前回の更新する前と更新した後の「ファイル更新時間」を取得するためです。
注意して欲しいのは、順番です。
ファイルのプロパティの取得は、Excelファイルの更新の前に実行してください。
Excelファイルを更新した後に取得してしまうと、更新時間が更新されてしまう可能性があります。
更新時間が上回るまで、ループ処理
ticks関数の中は、以下のように書いています。
1つ目のticks
ticks(outputs('ファイルのプロパティの取得_2')?['body/Modified'])
2つ目のticks
ticks(outputs('ファイルのプロパティの取得_3')?['body/Modified'])
ticks関数のなかに、Modified(更新時間)を入れます。
→ファイルのプロパティの取得で取得できていますよ!
変数updateFileTimeは、初めは初期値「0」にしています。
なので、1回目は必ず待ち時間が発生します。
その後、さらに「ファイルのプロパティの取得」を行い、
結果を変数に格納します。
再度条件式で、以前の更新時間と比較することで、更新しているかどうかを判断します。
これで、このフローの解説は終了です。
ループを抜ける時には、更新時間が更新されていることになります。
まとめ
今回は、Excelの更新を行っているのに、次の処理に反映されていない時の対処法について紹介しました。
ただ更新時間を回避するだけなのに、フローを多く挟んでますが、ご了承ください。
もし同じ事象にあって、苦しんでいる人がいれば参考にしてもらえると嬉しいです!
では、良いPowerAutomateライフを!