質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Google スプレッドシート

Google スプレッドシートは、フリーで利用できる表計算ソフト。Webアプリのためインターネットに接続することで利用できます。チャートやグラフの作成のほか、シートを他のユーザーと共有したり、同時に作業を進めることも可能です。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

1回答

5202閲覧

GASで保護セルを編集しようとしたときのエラーを無くしたい

Konayukin

総合スコア3

Google スプレッドシート

Google スプレッドシートは、フリーで利用できる表計算ソフト。Webアプリのためインターネットに接続することで利用できます。チャートやグラフの作成のほか、シートを他のユーザーと共有したり、同時に作業を進めることも可能です。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2021/06/01 08:39

GASを使って列に変更があった場合特定の場所に自動的に更新日時を書き込むスクリプトを作ったのですが、シートの管理者ではないため保護のかかった部分をスクリプトが編集しようとすると「保護されているセルやオブジェクトを編集しようとしています。編集する必要がある場合は、スプレッドシートのオーナーに連絡して保護を解除してもらってください。」というエラーメッセージがメールに届きます。
保護部分はそのまま編集出来ないようにしておきたいので

・特定のエラーが出た場合は無視するように設定する。←出来ればこっちがいい
・保護部分をそもそも無視するようスクリプトを書き換える。

等考えましたがやり方が分かりません。解決方法をお教えいただければと思います。

以下一応コードです。

javascript

1 function set_last_update() { 2 3 var sh=SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); 4 5 var activerange=sh.getActiveRange(); 6 7 var activerow=activerange.getRow(); 8 9 if(activerow > 8) 10 { 11 if(activerange.getColumn() == 2) 12 { 13 14 } 15 else 16 { 17 sh.getRange(activerow, 2).setValue(new Date()); 18 } 19 } 20 21}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

権限の無いユーザーがGAS経由で保護されたセルをいじれちゃったら、保護の意味がないですよね。
そういう意味ではエラーを無視するとか、保護を無視するのは無理だと思います。

逆にシート管理者(該当のセルの編集権限がある人)がスクリプトを実行させれば、保護を気にせず書き込みができるってことです。

GoogleWorkspace(旧 Gsuite)限定だと思いますが、onEdit のようなトリガーをセットしてなくても動作するシンプルトリガーだとスクリプトの実行者が編集したユーザーとなってしまい、保護箇所の書き込みは出来ませんが、別の関数名にして手動で トリガーを スプレッドシートから「編集時」でセットした場合は、スクリプトのオーナー(トリガーをセットした人かも)が実行者になるので、ユーザーが編集してスクリプトによる書き込みが発動しても、オーナー権限で保護されたセルへも書き込みがされます。

ということで、スクリプトを用意してあげて最後のトリガー設定のところをシートオーナーにやってもらえば要望を満たせると思います。


追記:
「質問に記載の条件に合致するスクリプトのエラーメールが届かないようにしたい」という質問だったようで・・・読み違えていたようです。失礼しました。

  • setValueの前に、書き込もうとしているセルが保護されているかどうかをcanEdit()で判定しIFで分岐させる
  • try catch で、setValue で発生するエラーを回避する
  • Gmailのフィルタ設定で、該当のエラーメールが来たら受信トレイをスキップさせ既読にする

こんな方法が思いつきます。

https://gsuiteguide.jp/sheets/canedit/

投稿2021/06/02 00:12

編集2021/06/02 04:33
sawa

総合スコア3002

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Konayukin

2021/06/02 04:19

すみません、もっと大きく書かなかったのがいけなかったですね... 質問にも書いた通り保護されたセルへの編集は”出来ないまま”にしておきたいのです。 そのうえでスクリプトが保護部分を編集しようとした際に来るメールが鬱陶しいので(でも今回以外のエラーとかがあった場合を考えるとメール自体を来ないようにするのは避けたいので)”今回のような保護された部分を編集しようとした際に発生したエラーだけスルーする”ように出来なる方法を探しています。 お手数をおかけしますがよろしくお願いします。
sawa

2021/06/02 04:33

読み違えていたようで失礼しました。回答を追記してみました。
Konayukin

2021/06/03 10:21

ありがとうございます!コードに関してはめちゃくちゃ求めていたものです!Gmail側での設定を変えるというのも盲点でした。 ちなみになんですがスプレッドシート側の設定で特定のエラーを無視するといったような設定は無いのでしょうか?
sawa

2021/06/03 10:44

うーん、そもそもエラーが出ないコードを書くべきなので、想定されるケースを考慮してifでの条件分岐などを使うべきです。try catchは、それらを考慮してでもエラーが出て困る場合の手段かなと。今回のケースなら書き込む前に保護されてるかを判別するか、保護セルの場所がわかってるなら行や列の数値でif文で回避すべきです。 特定のエラーを無視は無理かと思います。(私が知らないだけかもですが)
Konayukin

2021/06/11 02:46

返信が遅くなってしまい申し訳ございません。更に色々調べてみましたがやはりそういったものは無さそうでした。重ねての質問になってしまったのに丁寧に回答していただきありがとうございました!最初に教わった方針で進めてみようと思います!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問