@irigoma

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

GASでif elseの{にUnexpected token エラーが出ます

解決したいこと

Google Formにて得たお名前でtableシートを完全一致検索し、値があればあったセルの隣の値を、なければ「なし」というメールを送信したいのですが、else文でエラーが出てしまいます。

発生している問題・エラー

構文エラー: SyntaxError: Unexpected token '{' 

該当するソースコード

function onFormSubmit(e) {
  // フォームの回答を取得
  var name = e.namedValues['お名前'];
  var email = e.namedValues['メールアドレス'];
  // 自動返信メール件名
  var subject = 'subject';

    var book = SpreadsheetApp.getActiveSpreadsheet();
    var tsheet = book.getSheetByName("table");
    var search = tsheet.createTextFinder(name).matchEntireCell(true)
.findAll()
    ? true
    : false ;
    //完全一致検索
    if (search == true){
      var search = tsheet.createTextFinder(name).matchEntireCell(true);
      var range = search.findNext();
      var score = range.offset(0,1).getValue();
      var body =  score ;
      // メール送信
      GmailApp.sendEmail(email,subject,body);
    } 
     else (search == false) { //ここにエラー
        var body =  'なし';
      // メール送信
      GmailApp.sendEmail(email,subject,body);
  }
}

自分で試したこと

elseの{}を除去するとifの場合とelseの2通が送信されてしまいます。
https://gist.github.com/tanaikech/39f719bd10ccbb27edd694c33242e496#sample-script-5
こちらを参考にさせていただきました。

0 likes

2Answer

追加情報として、findAll()は、1次元配列を返しますので、.findAll() ? true : falseの場合、検索結果の有無に関係なくtrueが返されます。この場合、下記のような修正はいかがでしょうか。

function onFormSubmit(e) {
  var name = e.namedValues['お名前'];
  var email = e.namedValues['メールアドレス'];
  var subject = 'subject';
  var book = SpreadsheetApp.getActiveSpreadsheet();
  var tsheet = book.getSheetByName("table");

  var search = tsheet.createTextFinder(name).matchEntireCell(true).findNext();
  var body = search ? search.offset(0, 1).getValue() : 'なし';
  GmailApp.sendEmail(email, subject, body);
}
2Like

Comments

  1. @irigoma

    Questioner

    ちょうど困ってました!!うまく実装することができました。ありがとうございます!

else if (search == false) でしょう。

しかしそもそもsearchは必ずtruefalseのどちらかになっているのでしょうから、

if (search == true) {
  ...
} else {
  ...
}

で十分なのではないでしょうか。

1Like

Comments

  1. @irigoma

    Questioner

    ほんとに基本的なことで失礼しました。ありがとうございます。助かりました!

Your answer might help someone💌