Googleスプレッドシート GAS初心者です。
A,B,Cの3つのシートがあるスプレッドシートに
「ある条件を満たす行はAシート→Bシートに転記する」
「ある条件を満たす行はBシート→Cシートに転記する」
というGASをそれぞれに作り、動作はうまくいきました。
ただ、複数のユーザーが同時編集する可能性があり、
AB転記GAS、BC転記GASを同時に走らせる可能性があり、ロックをかけようと考えました。
調べるうちに documentLock が良いと考え、下記コードを記述しました。
下記コードはAB転記GASです。BC転記GASも同様の構造で関数名などを変えて記述しています。
GAS
1function flow(){ 2 var documentLock = LockService.getDocumentLock(); 3 if (documentLock.tryLock(5000)){ 4 if(!documentLock.hasLock()){ 5 console.log("ロック取得できず"); 6 return; 7 } 8 try { 9 main(); 10 } finally { 11 documentLock.releaseLock(); 12 } 13 } else { 14 Browser.msgBox("ロック取得に失敗しました。スクリプトは実行されませんでした。"); 15 } 16}
上記のflow関数をスプレッドシート上に描画したボタンに割り当て、main関数がしっかり呼び出され
期待通りの動作をすることまでは確認できましたが、肝心のロックがかかっていないようです。
スプレッドシートを複数のブラウザから開き、ほぼ同時にスクリプト実行しても、後から実行したスクリプトは、
期待していたようなロックによる停止もなく、どちらも実行できてしまいます。
2つのアカウントを用いて試したりもしまたが、後発スクリプトではロックによる停止は起こりませんでした。
<やりたいこと> 2点あります。
・同時にスクリプトを実行できないように制御したい
・シートのセルが他ユーザーにより編集状態になっているとき、スクリプトが実行できないようにしたい。
恐れ入りますがご教授いただけると幸いです。
よろしくお願いいたします。
あなたの回答
tips
プレビュー