質問: CalendarApp.getCalendarById('hiro0615taka@gmail.com');//<---ここを自分のgmailアドレスへ変更する //指定のカレンダーIDへインベント登録 Cal.createEvent(eventname,start,end,{location:place});//createEvent(タイトル、開始日時、終了日時、オプション) //カレンダー登録が終わったイベントのaddedへ「登録完了」を記入 sht.getRange(i,6).setValue("登録完了"); } //ifを閉じる } //forを閉じる } //functionを閉じる '''
回答: 読みたくないんですが、自己満足回答のために、57行目に提案入れてます。ただ日付や時刻が空白だともっと手前でエラーになるので、微妙です。 が、日付が空白だとエラーになります、という質問ではないので。 ``` /* カレンダーへイベントを登録する */ function getsheet() { /*-前準備-*/ //シートの項目を以下変数定義 var sht, i, eventday, eventname, place,start, end, added; //shtを定義 sht = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("sheet1"); //シートの2行目〜最終行まで処理を繰り返す for(i = 2; i <= sht.getLastRow(); i++) { /*-前準備ここまで-*/ /*--スプレッドシートの値を取得して変数へ格納--*/ //i行1列目の値(イベント日)をeventdayへ格納 eventday = sht.getRange(i, 1).getValue(); //開始日をUtilities.formatDateでフォーマットしてbへ格納 var b = Utilities.formatDate(eventday,"JST","yyyy/MM/dd"); //i行2列目の値(イベントの名前)をeventnameへ格納 eventname = sht.getRange(i,2).getValue(); //i行3列目の値(イベントの場所)をplaceへ格納 place = sht.getRange(i,3).getValue(); //i行4列目の値(開始時刻)をstartへ格納 var starttime = sht.getRange(i,4).getValue(); var H = starttime.getHours();//starttimeの時間を取得してHへ格納 var M = starttime.getMinutes();//starttimeの時間を取得してMへ格納 var S = starttime.getSeconds();//starttimeの時間を取得してSへ格納 //new Dateメソッドで開始日時「yyMMdd hh:mm」をstartへ格納 var start = new Date(b+" "+H+":"+M+":"+S); //i行5列目の値(終了時刻)をendへ格納 var endtime = sht.getRange(i,5).getValue(); var H1 = endtime.getHours();//endtimeの時間を取得してH1へ格納 var M1 = endtime.getMinutes();//endtimeの分を取得してM1へ格納 var S1 = endtime.getSeconds();//endtimeの秒を取得してS1へ格納 //new Dateメソッドで終了日時「yyMMdd hh:mm」をendへ格納 var end = new Date(b+" "+H1+":"+M1+":"+S1); /*--カレンダーへ登録--*/ //i行6列目の値(イベント登録有無)をaddedへ格納 added = sht.getRange(i,6).getValue(); //addedの値が空白でなかったらスキップ if(added !== "" || !eventname || !start || !end || !place) { continue; } Cal = CalendarApp.getCalendarById('hiro0615taka@gmail.com');//<---ここを自分のgmailアドレスへ変更する //指定のカレンダーIDへインベント登録 Cal.createEvent(eventname,start,end,{location:place});//createEvent(タイトル、開始日時、終了日時、オプション) //カレンダー登録が終わったイベントのaddedへ「登録完了」を記入 sht.getRange(i,6).setValue("登録完了"); } //forを閉じる } //functionを閉じる ``` 以下、自己満足回答です。検証してないので動かないかも。 ``` function driveOnEdit() { const targetSheet = SpreadsheetApp.getActive().getSheetByName("sheet1"); const activeCell = targetSheet.getActiveCell(); const r = activeCell.getRow(); const c = activeCell.getColumn(); const topLeftRange = targetSheet.getRange(r, c); const e = {range: topLeftRange}; onEdit(e); } function onEdit(e) { const targetSheet = "sheet1"; const ownerEmail = "hiro0615taka@gmail.com"; const sheet = e.range.getSheet(); if(sheet.getName() !== targetSheet) { return; } const c = e.range.getColumn(); if(c > 5) { return; } const r = e.range.getColumn(); const val = sheet.getRange(r, 1, 1, 5).getValues()[0]; if(val.filter(function(e) { return !e; }).length > 0) { return; } const cal = CalendarApp.getCalendarById(ownerEmail); const startTime = new Date(val[0]).setHour(val[3].getHours()).setMinuts(val[3].getMinutes()); const endTime = new Date(val[0]).setHour(val[4].getHours()).setMinuts(val[4].getMinutes()); const id = upsertEvent(cal, val[5], val[1], startTime, endTime, undefined, val[2]); sheet.getRange(r, 6).setValue(id); } function upsertEvent(calendar, id, title, startTime, endTime, description, location, guests, sendInvites) { if(!id) {return createEvent(calendar, title, startTime, endTime, description, location, guests, sendInvites); } const evt = calendar.getEventById(id); if(!evt) {return createEvent(calendar, title, startTime, endTime, description, location, guests, sendInvites); } updateEvent(evt, title, startTime, endTime, description, location, guests); return id; } function updateEvent(event, title, startTime, endTime, description, location, guests) { if(title && event.getTitle() !== title) { event.setTitle(title); } if(startTime && event.getStartTime() !== startTime) { event.setStartTime(startTime); } if(endTime && event.getEndTime() !== endTime) { event.setEndTime(endTime); } if(description && event.getDescription() !== description) { event.setDescription(description); } if(location && event.getLocation() !== location) { event.setLocation(location); } if(!guests) { return; } const current = event.getGuestList(false).map(function(e) { return e.getEmail(); }); current.filter(function(e){ return guests.indexOf(e) === -1; }).forEach(function(e) { event.removeGuest(e);}); guests.filter(function(e){ return current.indexOf(e) === -1; }).forEach(function(e) { event.addGuest(e);}); } function createEvent(calendar, title, startTime, endTime, description, location, guests, sendInvites) { const option = buildEventOption(description, location, guests, sendInvites); return calendar.createEvent(title, startTime, endTime, option).getId(); } function buildEventOption(description, location, guests, sendInvites) { const args = { description: description, location:location, guests:guests, sendInvites:sendInvites}; const keys = ["description", "location", "guests", "sendInvites"].filter(function(e){ return args[e];}).reduce(function(a,c){ a[c] = args[c]; return a;},{}); } ```