技術情報ブログ
Power Platform
2024.09.18

Power Automateのベストプラクティス・アンチパターン(6)【Power Automate上でExcelファイルを編集する際の注意点】

Power Automateのベストプラクティス・アンチパターン(6)【Power Automate上でExcelファイルを編集する際の注意点】
小刀稱知哉

こんにちは。アーティサン株式会社の小刀稱(ことね)です。

Power Automateは、コーディングの知識がなくともお手軽に業務の自動化を行うことができる非常に有用なツールです。

しかし、誰でも簡単に始めることができるといえど、そこにはお作法が存在します。

お作法を守らずに作成すると、「他の人がメンテナンスできない」や「修正時のコストが大きい」といった問題が発生します。

そこで、Power Automateに関する案件を数多く対応してきた弊社が、現在までに蓄積した「Power Automate作成時のアンチパターン・ベストプラクティス」について紹介します。

本記事を読んでいただくことで、Power Automateを扱う際の「やるべきこと・やってはいけないこと」を知り、より保守性の高いフローを作るコツを掴めるかと思います。

内容としては、既にPower Automateでフローを作成したことがある方に向けた記事です。
また、これからPower Automateを作成したい方も、事前に一読していただくことをお勧めします。

Power Automate初心者の方は、以下の記事も参考にしてください。

第6回目の今回は「Power Automate上でExcelファイルを編集する際の注意点」という内容についてお伝えしていきます。

 

アンチ・パターン(問題のあるフロー)

まずは、今回の全体概要について説明します。

処理の内容は以下です。

  1.  Power AppsからPower Automateを実行する
     (第一引数にログインユーザーの表示名、第二引数にログインユーザーのメールアドレスを格納)
  2.  Power Automate上で以下を実行
    • SharePoint上に保存したテンプレート用Excelファイルを初期化
    • Power Appsから受け取った値をExcelファイルに転記
    • SharePoint上の特定フォルダにExcelファイルをコピー

※このPower Appsは複数ユーザーに共有しています。 よって、Power Automateが同時実行される可能性があります。


また、上記を実装したPower Automateは以下です。

 

私が今まで経験した問題点

上記のフローを作成・運用した際、私が今まで経験した問題点を以下に示します。

  • 問題点1: Power Automateが同タイミングで実行されると、後から実行された方の値が優先される
    Power Automateが複数ユーザーから同タイミングで実行された場合、後から実行された方の値が優先される事象(いわゆる「後勝ち」状態)が発生しました。 イメージとしては以下です。
  • 問題点2: 「~が共有するためにロックしています。」というエラーが発生
    Power AutomateからExcelファイルを操作する際、以下エラーが表示されてフローが異常終了する事象が発生しました。
  • 問題点3: データの更新が反映されない
    「行の更新」アクションにて値を転記した後「パスによるファイルコンテンツの取得」を行っていますが、 転記した最新の値が反映されていない状態が発生しました。

 

ベスト・プラクティス(修正したフロー)

上記のフローを以下のように修正してみました。

対応した詳細について、それぞれ紹介していきます。

 

対策1-1:コンカレンシー制御の設定

問題点1が発生した原因としては、以下2点が挙げられます。

Power Automateが同時実行されること
Excelファイルに同タイミングアクセスされること

よって、それぞれに対応した対策を実装しました。

まずは、Power Automateが同時実行されることへの対策です。

Power Automateには、コンカレンシー制御という機能があります。 これは1つのPower Automateを同時並行で実行できる数を制御する機能です。

今回は、トリガーアクションのコンカレンシー制御をオンとし、並列処理の次数(=同時並行で実行できるフロー数)を1に設定しました。

※ちなみに、コンカレンシー制御は既定ではオフとなっておりますが、オフの場合、並列処理の次数は無制限(=並列処理される)となっています。 必ずコンカレンシー制御をオンにして、次数を1にするよう設定してください。

同時実行、ループおよびバッチ解除の制限

上記設定を行うことで、Power Automateが同時実行される数が1つのみとなります。

 

対策1-2:チェックアウト機能を活用する

先程の対策は、Power Automate自体の同時実行数を制限する内容でした。 こちらの対策では、チェックアウト機能を用いて、Excelファイルに同タイミングでアクセスされることを防ぐ内容です。

チェックアウト機能とは

本機能は、一言でいうとファイルの排他制御を行うための機能です。

ユーザーAが対象のExcelファイルをチェックアウトすると、ユーザーBは「ユーザーAがチェックアウトの状態を解除するまでExcelファイルを編集できない」という状態にすることができます。

※「チェックアウトの状態を解除する」とは、具体的に言うと、「チェックイン」や「チェックアウトの破棄」のことを指します。

詳細は以下URLをご参照ください。

SharePoint ライブラリのファイルのチェックアウト、チェックイン、または変更内容の破棄を行う

今回は、Excelファイルへの操作(今回は、初期化~ファイルコンテンツを取得)を行う前に、チェックアウトを行いました。
また、操作終了後はチェックアウトの破棄を行っています。

(ちなみに、今回はチェックアウトの破棄を行っておりますが、チェックインでも問題ありません。 特にバージョン履歴に残す必要がないと考えたので、チェックアウトの破棄にて実装しています。)

対策2:共有ロックが解除されるまで待つ

こちらは定期的にファイルを確認し、ロックが解除されるまで待つように修正しました。
(私の経験上、大体5~15分程度待てばロックが解除されることが多いです。)

修正した箇所は以下です。

  1. 「Do Until」アクションを追加し、「ファイルのチェックアウト」を配下に移動
  2. 「Do Until」アクションのパラメーターに以下を設定

上記の設定を行うことで、ステータスコードが200(=正常終了)となるまで、「Do Until」アクションを繰り返すようになります。

1. 「遅延」アクションを追加し、「パラメーター」に以下を設定

2. 「遅延」アクションの「設定」に以下値を設定

上記設定を行うことで、ファイルのチェック → チェックでエラーとなった場合、2分間待つ → 再度ファイルのチェック → …というループ処理が行われます。

 

対策3:データが反映されるまで待つ

問題点3については、どうやらPower Automate上で転記した値はすぐに反映されない場合があるというのが原因のようです。 よって、データが反映されるまで待つという処理を加えました。

※待ち時間については、色々試してみましたが3~5分程度待つことでデータが反映されるようです。

さいごに

Power Automate上でExcelファイルを操作することは、よくある内容ではないでしょうか。 しかし、複数ユーザーがExcelファイルを操作することなどを考慮する必要があり、案外難易度が高めの実装となります。

今回ご紹介した内容も、とても有用な内容ですので、是非覚えていただければと思います。


弊社ではお客様の業務を効率化するご支援を数多く承っております。 普段の業務の中で、「〇〇をもっと効率化できないか」というような疑問がある場合には、お気軽にアーティサン株式会社までお問い合わせください。

Power Platform(SharePoint・Power Apps・Power Automate)に関する営業活動や設計、開発などを担当:小刀稱知哉

小刀稱知哉

大分県出身(温泉大好き)、現在は東京都在住

1990年生まれ

30才でメーカーの技術営業からIT業界にジョブチェンジ!!!

趣味は読書

Power Platform(SharePoint・Power Apps・Power Automate)に関する営業活動や設計、開発などを担当しております!

持ってる資格はPL-200/PL-300/PL-400/PL-600/MS-700/AZ-104/AZ-305

シェアする
記事カテゴリ
最新記事
2024.09.18

Power Automateのベストプラクティス・アンチパターン(6)【Power Automate上でExcelファイルを編集する際の注意点】

2024.06.26

一歩先へ進む企業のためのPower Platform内製化マニュアル:Power Apps・Power Automateの内製化に必要なリンク一覧

2024.06.05

【2024年6月更新】Power Automate 設計・構築時のTips集

2024.05.15

非エンジニア【(元)自治体職員】がローコード開発をして気が付いたこと コーディング規約とPower Platformプレミアムサンプルアプリ集

2024.05.01

Power Apps・Power Automateの勉強方法(2)

モデル駆動型アプリPower AppsPower PlatformSharePointExcelPower AutomateC#attributevalidationローコードAngularAccessInfoPathMatTableAngular Materialデータ構造SortByColumns関数TypeScriptHTMLEF CoreマイグレーションFramework CoreAttribute directivesO/Rマッパーazure sql databaseCase式HTTP RequestCSSxUnit.Net Core 3.1VSCode.Net Core Test ExplorerDataverse for Teamsitem関数Google MapsMarker ClustererRANK()関数Dynamics 365 SalesMicrosoft TranslatorマーカークラスタリングライブラリtailwindcssマルチテナントドロップダウンメニューBreakpointObserverメディアクエリスマホPCレスポンシブ入門初心者中級者キャンバスアプリDatePickerDropdownviewビューアクセス制限承認リマインドSetForAllUpdateContextロードマップ技術It情報技術メッセージIDメールfirst()関数nest入れ子動的リストcollectionコレクション複数の添付ファイル承認フローformエクスポートインポートカスタマイズcomponentダイアログコンポーネントdialogTips新機能変数検索Microsoft 365グループセキュリティグループ送信元メールの送信差出人インスタントクラウドフロー自動化したクラウドフロー委任VBAエラーエクセルerror復元restorePower BI個人列ユーザー列SharePoint Onlineリスト非表示アプリ[市民開発者構築自動化したクラウド フローフローの種類インスタント クラウド フロースケジュール済みクラウド フローレスポンシブ レイアウトresponsive layoutデータ行の制限引き継ぎ退職所有者を変更異動LoopMicrosoftdesignJSONデザインtemplateテンプレート運用選択肢列参照列ChatGPTOpenAIオープンAIチャットGPTgalleryギャラリースクロールコンテナショートカットキーshortcut keyconcat関数文字制限フロー実行開発環境環境本番環境ライセンス環境構築手順pipelineCI/CDパイプラインDevOpsMicrosoft 365簡易在庫管理時間外通知ファイルフィルター クエリドキュメント ライブラリfilter querysortソートmultiple item複数項目シェアポイント便利機能カレンダーCalendarTeamsローコード開発非エンジニア体験談勉強内製化
PageTop
ページトップに戻る