前提・実現したいこと
GASを勉強し始めて3日程の初心者です。
https://tonari-it.com/gas-workflow-form-gmail-spreadsheet/
を参考に勤務時間の申請や承認をGASを使ってできないか、見よう見まねで勉強させていただいています。
というかほぼ丸パクリです。
申告者はgoogle formにて勤務に関する情報を送信。
フォームに記入されたことをトリガーとして承認者へ"GmailApp.SendEmail"でGmailを送る。
メール受信者は添付のURLをクリックすると"doGet"でメールを返すとともにスプシ上でも承認を出す。
発生している問題・エラーメッセージ
2つのfunction でいずれも e undefined と出てきてしまいます。
スプシ上にはフォームの回答結果が記載されているので以下のコードでなぜundefined なのか分かりません。
また承認の決済を出すためにURLを踏みますが、
TypeError:Cannnot read property 'getRange' of null(行32、ファイル「コード」)
とも出てきてしまいます。
ソースコードはほぼコピー同然なのに何がいけないのでしょうか?
余計なコードもあるかと思いますがよろしくお願いします。
該当のソースコード
//フォーム送信時にメール自動配信 function sendMessage(e){ const [timeStamp, email, worker, workday, B_startTime, B_endTime, location, comment]=e.values; const row = e.range.getRow(); const sheet = e.range.getSheet(); sheet.getRange(row,9).setValue("確認中"); const recipient = "address@~"; const subject = "勤務時間の申告・申請のお知らせ"; let body = ""; body +="勤務時間に係る申告・申請がありました。\n\n"; body +="申請者:" + worker; body +="\n勤務日:"+ workday; body +="\n勤務開始時間:"+ B_startTime; body +="\n勤務終了時間:"+ B_endTime; body +="\n勤務場所:"+ location; body +="\nコメント:"+ comment; body +="\n\n承認する場合は、以下のURLをクリックしてください。\n"; body +="https://script.google.com/URL"; body +="?row=" + row +"行目"; GmailApp.sendEmail(recipient,subject,body); } //ウェブアプリケーションとして公開 function doGet(e){ const row = e.parameter.row;//関数rowは回答に対応する行番号 const sheet = SpreadsheetApp.getActiveSheet();//現在開いているアクティブなスプシを取得 const values = sheet.getRange(row, 1,1,9).getValues()[0]; const [timeStamp, email, worker, workday, B_startTime, B_endTime, location, comment] = values; sheet.getRange(row,9).setValue("承認"); //承認メールを申請者へ送信 const subject = "勤務時間の申告・申請のお知らせ" let body = ""; body += "以下の勤務時間の申告・申請が承認されました。"; body +="申請者:" + worker; body +="\n勤務日:"+ workday; body +="\n勤務開始時間:"+ B_startTime; body +="\n勤務終了時間:"+ B_endTime; body +="\n勤務場所:"+ location; body +="\nコメント:"+ comment; GmailApp.sendEmail(email,subject,body);//申請者にメールを送る let html = ""; html += "<h1>勤務時間申告・申請のお知らせ</h1>"; html += "<p>あなたは勤務時間申告・申請を承認しました。</p>"; html += "<ul>"; html += "<li>申請者: + worker</li>"; html += "<li>勤務日: + workday</li>"; html += "<li>勤務開始時間: + B_startTime</li>"; html += "<li>勤務終了時間: + B_endTime</li>"; html += "<li>勤務場所: + location</li>"; html += "</ul>"; return HtmlService.createHtmlOutput(html); }
試したこと
トリガーの設定は、
sendMessage : Head フォーム送信時
doGet : Head 起動時
にしています。
まだ右も左も分からないので引数(e)が両方のfunctionで使われているからか等も考え色々試しましたが見当違いだったようです。
補足情報(FW/ツールのバージョンなど)
以上です。よろしくお願いいたします。

バッドをするには、ログインかつ
こちらの条件を満たす必要があります。