質問: "タイトル" var body="本文"; MailApp.sendEmail({to:to,subject:sub,body:body}) } ``` ### 試したこと 同時に行うのがダメなのかと思い、カレンダーへの反映とメール送信それぞれ単体でスクリプトを作り 試しましたが、その時はうまくいきました。 ### 補足情報(FW/ツールのバージョンなど) 不足している情報がございましたら、ご指摘いただけますと幸いです。 宜しくお願い致します。
回答: いくつかの点で不備がある点を修正すれば、メールとカレンダーの両方が動作しました 6行ほど修正していますので、確認してください。 なお(guest)という表記については、こちらでは正しい直し方がわからないため、下記をコピペしても動作しません。きちんと6行分目を通してください。 ``` function sendToCalendar(e) { //有効なGoogleスプレッドシートを開く var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); var dat = sheet.getDataRange().getValues(); //getRange,getValueを←のように修正 //ゲストを設定 var aaag = "aaa@aaa.co.jp,bbb@aaa.co.jp,ccc@aaa.co.jp,ddd@aaa.co.jp" var bbbg = "aaa@bbb.co.jp,bbb@bbb.co.jp,ccc@bbb.co.jp,ddd@bbb.co.jp" //追加された行番号を取得 var num_row = sheet.getLastRow() - 1; //配列は0からはじまるためここで-1する必要があります。 //追加された行から名前を取得 var nname = dat[num_row][1]; //追加された行から場所を取得 var loc = dat[num_row][4] //詳細欄の取得 var des = dat[num_row][5]; //予約を記載するカレンダーを取得 var guest =""; if(loc =="aaa"){ id="aaa@google.com"; guest=aaag;} else if(loc =="bbb"){ id="bbb@google.com"; guest=bbbg;} var cals = CalendarApp.getCalendarById(id); /* 日時をセット */ var evtDate = new Date(dat[num_row][2]); //iは存在しないので、num_rowに修正 var evtTime = new Date(dat[num_row][3]); //iは存在しないので、num_rowに修正 evtDate.setHours(evtTime.getHours()); evtDate.setMinutes(evtTime.getMinutes()); //予約情報をカレンダーに追加 thisevent = cals.createEvent(nname, evtDate, evtDate,{location: loc, description: des, guests:guest, sendinvite: true}); //ここの(guest)をこのまま放置すると動作しません。 //メールの送信 var to = guest; //ここも(guest)のまま放置すると動作しません。 var sub = "タイトル" var body="本文"; MailApp.sendEmail({to:to,subject:sub,body:body}) } ``` num_rowとの関連になるのですが、配列は0からはじまります。 そのため、例えばlocをdat[num_row][4]としておられますが、これはE列に該当します(D列ではないです)。A列なら0,B列なら1です。2,3,4,5が出てきますが特に2,3はカレンダーの日時になり、これが列がずれていると動作しないと思いました。 C列に日付、D列に時間が正しく設定されていれば、フォームから送信時のトリガーでメールとカレンダーが両方登録されるという期待通りの結果を得ることができました。