「共有する為に~によってロックされています」を回避する方法
PowerAutomateでSharePointのドキュメント内のExcelに対して操作をする際にエラーが発生しました。
エラーを参照したところstatusは423でした。これは「ファイルがロックされている」時に出るエラーです。
以下箇条書きは私が作ったフローでエラーの発生ポイントをピックアップしたものです。
エラーが発生したフローの操作内容がstatus423の説明に当てはまるのか確認してみましょう。
- ExcelOnlineの「スクリプトの実行」で指定したExcelに値を入力
- ファイルをリネームするためにHTTPリクエストを送信
- 取得した情報をもとにファイル名を書き換える
1番で対象のExcelにデータを書き込みます。その後3番で同じExcelに操作を加えるところでエラーになります。
![](http://powerplatform.tokyo/wp-content/uploads/2024/06/prof-batsu-e1719203015396.jpg)
「一度Excelにアプローチした後は6分経過しないとロックが解けない」
と書いてあるサイトもありますね。ロックの解除はできない様です。
操作内容は423番のエラーの内容と一致しますね。1回アクセスしたExcelは時限ロックが効いてしまう様です。
・・・困りました。仕様とはいえ6分待つのは嫌ですよね。抜け道がないのかと考えすぐに調査しました。
結論から申し上げますと運用でカバーすることで待ち時間無くフローを通す方法を見つけました。
関連記事
Officeスクリプトを使ったフロー内の操作について解説しています。
PowerAutometeとは
PowerAutomateはMicrosoftが提供しているPowerPlatfrmという製品ラインに属したアプリケーションです。
簡単に説明するとクラウド環境を利用して「アプリケーション間の作業を自動化」することができます。
Status423とは
Microsoftのドキュメントによると「アクセスしているリソースがロックされています」と表示されています。
Google検索で調べるとOnline上のExcelは1回アクセスするとロックがかかるという情報がいくつか出てきます。
私が用意したデータもOfficeスクリプトにより文字を記入した後にファイルをリネームするというフローです。
自分で作ったものと仕入れた情報の内容が一致するので原因は「ファイルのロック」だと特定しました。
エラーが発生した時の表示について
エラーで止まったフローを展開して下の方まで見ていくと「状態コード」という場所があります。
ここに423という表記があります。また画面右側にも実行の詳細という短冊状のウインドウが出てきます。
この中にあるエラーの詳細を見ると「共有する為に~によってロックされています」という表示があります。
![](https://powerplatform.tokyo/wp-content/uploads/2024/05/pau-2-1-1024x538.png)
![](https://powerplatform.tokyo/wp-content/uploads/2024/05/pau-2-1-1024x538.png)
画面の表示から見ても「Excelファイルがロックされている」ことが分かりますね。
お知らせ:SharePointのチェックイン、チェックアウトでは解決しません
本事例をインターネットで検索するとSharePointのチェックイン/アウトの記事が見つかることがあります。
- チェックイン ・・・ 他のユーザーの編集を可能にします
- チェックアウト ・・・ 他のユーザーの編集を不可能にします(ロック)します
おそらくチェックアウトに出てくる「ロック」というキーワードで表示されてしまうと予測しています。
機能(アクション)としては本件と似ているのですが対策内容は異なります。ご注意ください。
対策:ファイルのコピー
基本的には共有が解けるまで待つしかないです。Googleなどで検索しても「6分待つ」が主流です。
具体例を挙げるとコントロールというコネクタのDountilを使ってループを組み6分やり過ごすという方法です。
しかし私は待ちたくないので試行錯誤の末解決策を見つけました。「ファイルをコピーする」という方法です。
フローがイメージできるように画像と作業手順を用意してみました。
![](https://powerplatform.tokyo/wp-content/uploads/2024/05/pau-2-3-1024x538.png)
![](https://powerplatform.tokyo/wp-content/uploads/2024/05/pau-2-3-1024x538.png)
私の事例ではここでOfficeスクリプトによる「スクリプトの実行」を配置しました。
別のフォルダにSTEP1で使った原紙ファイルをコピーして貼り付けます。
私の事例ではここでファイル名を変更(リネーム)しています。
この方法を使えばOfficeスクリプトでデータを書き込んだ後のExcelファイルもリネームすることができます。
作業後の原紙ファイルは破棄せず上書きして使うことでずっと原紙ファイルとして使うことができます。
詳細:手作業の中からヒントを得る事ができた
最初に気付いたのは「スクリプトの実行後でもファイルをコピーできる」ということです。
手作業でExcelファイルの名前を変える作業をした時に原本をとっておこうと考えファイルをコピーしました。
なんとなくですがこの時に「コピーが使えるかもしれない」と思いついたのがきっかけです。
幸いSharePointには「ファイルのコピー」というフローが用意されているので選択して使ってみました。
試してみたところ思った通りでした。スクリプトの実行後でもファイルをコピーする事ができました。
Excelファイルはコピーすると新規ファイル扱いになる
次はコピー後のファイルに対しリネームのフローが通るのかを確認しました。
フローを作成し確認してみるとエラー通知は出ません。あっさり指示が通ります。
状態から予測するとコピーしたファイルは新規扱いになる様ですね。
これでスクリプトを実行したあとのExcelファイルに新しい名前を登録するという作業が完了しました。
![](https://powerplatform.tokyo/wp-content/uploads/2024/05/pau-2-2-1024x538.png)
![](https://powerplatform.tokyo/wp-content/uploads/2024/05/pau-2-2-1024x538.png)
ご注意ください:「パスによるファイルメタデータの取得」について
この操作をフローに組み込んだのは理由があります。コピー対象のExcelの拡張子が.xlsmだった為です。
ファイルの拡張子(形式)が.xlsmの時はフローがファイルを認識しないことがあります。
そんな時はメタデータの取得でデータを捕まえるという作業を追加すると解決します。
課題:原紙ファイルへのアプローチが6分以内だとエラーになるのか
1つのフローの中で作業を通すことができたのですが同時に不安も出てきました。
権限がオープンでグループによる共同編集が可能なExcelに対してフローを用意できるのかという心配です。
「原紙のExcelファイルに対し6分以内に複数の指示が到達したらどうなるのか」と考えました。
資料や活用事例を調べてもピンポイントの回答を見つけられなかったので実際に試す事にしました。
フロー内でエラーが出なければフロー間でもエラーは出なかった
用意したフローに対して6分以内に複数回操作指示が入った時にどうなるのかを検証しました。
具体的な操作としては約1分おきに用意したフローが発動するようなテストを3回行いました。
結論から申し上げますと競った時間でフローが走っても(トリガーが引かれても)全く問題ない様です。
![](https://powerplatform.tokyo/wp-content/uploads/2024/05/pau-2-4-1024x538.png)
![](https://powerplatform.tokyo/wp-content/uploads/2024/05/pau-2-4-1024x538.png)
トリガーを引いた時間が速い処理から順にエラーなく仕事をこなしてくれることを確認しました。
![](http://powerplatform.tokyo/wp-content/uploads/2024/06/prof-ase-e1719202983724.jpg)
![](http://powerplatform.tokyo/wp-content/uploads/2024/06/prof-ase-e1719202983724.jpg)
![](http://powerplatform.tokyo/wp-content/uploads/2024/06/prof-ase-e1719202983724.jpg)
PowerAutomateは概念が非常に難しいです。
作業がイメージできない時は実際に試してみることをおすすめします。
参考:ExcelOnlineには「ブックを閉じる」がない
不具合に対する対策を考える際に単純に「ブックを閉じる」事ができれば解決すると思っていました。
私ExcelVBAを使います。WorkbookオブジェクトのCloseメソッドのような指示ができれば良いと考えました。
ブックを閉じてしまえばロックというステータスが消えるのではと考えた為です。しかし甘かった様です。
OnlineのExcelは自動保存など管理面では非常に便利です。
ブックを閉じる(終了する)などのオンオフ機能が充実してくるとより使いやすくなりそうですね。
最終結論
現状status423に対するエラー回避としてできることは2つという結論に達しました。
- ファイルをコピーする
- フロー内でループを用意して6分前後待つ
![](http://powerplatform.tokyo/wp-content/uploads/2024/06/easy-peasy_cEzGvTpVrn-e1719202961416.png)
![](http://powerplatform.tokyo/wp-content/uploads/2024/06/easy-peasy_cEzGvTpVrn-e1719202961416.png)
![](http://powerplatform.tokyo/wp-content/uploads/2024/06/easy-peasy_cEzGvTpVrn-e1719202961416.png)
基本的は1番の処理で対応しましょう。
6分待たなくて良いのは非常に大きな成果です。
まとめ
今回はエラーの詳細と対策を紹介しました。
比較的新しいアプリケーションですのでユーザーインターフェース含め仕様が頻繁に変わります。
よって今回の事例もアプリのアップデート(バージョンアップ)により解決する可能性があります。
条件としては「現状できる対策」という捉え方をしてください。
加えて本事例はほかの事例にもフィードバックできる可能性がある内容です。
例えばOneDriveに格納されたExcelにも同じ対応ができるのではと思っています。(まだ試していません)
このように失敗から生まれるものもあります。失敗は何かのメッセージだと思って改善に取り組みましょう。