グーグルフォームから入力されたパラメータを指定のスプレッドシートに転記するGASを作成しています。  
そのスプレッドシートには、編集保護をかけて特定のユーザー権限のみ書き込めるようにしています。

アプリケーションのオーナー権限は統一しています。  
このとき、GASを実行したところ以下のエラーでアプリケーションがストップしました。

```

    2021/06/22 19:57:43 エラー 保護されているセルやオブジェクトを編集しようとしています。編集する必要がある場合は、スプレッドシートのオーナーに連絡して保護を解除してもらってください。
    
```

となります。そこで、try catchで次のように文章を囲みました。

```

    try {
        // your script code here
          sheetdetail.getRange(lineNumberDetail, 1).setValue(applicationNumber);
          sheetdetail.getRange(lineNumberDetail, 2).setValue(detailsOfOrder);
          sheetdetail.getRange(lineNumberDetail, 3).setValue(appropriatenessOfTheApplicationAmount);
          sheetdetail.getRange(lineNumberDetail, 4).setValue(orderPeriod);
          sheetdetail.getRange(lineNumberDetail, 5).setValue(deliveryTime);
          sheetdetail.getRange(lineNumberDetail, 6).setValue(remarks);
          sheet.getRange(lineNumber, 33).setValue('未申請');
      } catch (e) {
        MailApp.sendEmail("********", "Error report", e.message);
      }
    
```

これでメールが送信されると思ったのですが、どうやらtryの中でアプリケーションが止まってしまっているように見えます。  
こちらどういった原因が考えられますでしょうか？  
詳しい方おられましたらご教示いただけますと幸いです。  
現時点では

パーミッション系のエラーの場合try catchは無視されて実行できないと推察しております。
CC BY-SA 4.0
2021-06-22T11:06:44.387
77708
2021-06-22T16:30:03.323
2021-06-22T16:30:03.323
29826
46983
question
google-apps-script
Google Apps Scriptのtry catchハンドリング
GAS
については詳しくないので少し調べた程度ですが、いきなり書き込もうとしてエラーハンドリングするより、まずは編集権限の有無を確認してから書き込む方が良さそうです。

例えば `canEdit()` で指定範囲の編集権限を確認できるようです。

**参考:**  
[指定範囲に編集権限があるかどうか調べる：canEdit()](https://arukayies.com/gas/canedit)

> 指定範囲に編集権限がある場合にはtrue、権限がない場合はfalseを返します。
```

>     function myFunction() {
>       const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheets()[0];
>       const range = sheet.getRange('B2:D10');
>       range.canEdit()
>     }
>  
```
CC BY-SA 4.0
2021-06-22T12:12:45.880
77710
2021-06-22T12:12:45.880
3060
77708
answer