質問編集履歴

1 試したことの構文をカレンダーに書き込む動作の部分まで記載しました

Suica31R

Suica31R score 6

2018/07/06 03:49  投稿

GASを用いたプログラムについて
### 前提・実現したいこと
Gasを用いて、装置の予約フォームを作製しようとしています。
フォームのスプレッドシートからカレンダーに追加という動作の中で、
カレンダーを参照→タイトルとイベントを取得→同一時刻・同一装置での予約があった場合にメールを送るという部分で手詰まっています。
### 発生している問題・エラーメッセージ
①「オブジェクト Calendar で関数 gettitle が見つかりません。」というメールが届きます。
② そもそもカレンダーに予定が追加されません(スプレッドシートには登録されています)
### ソースコード
function sendToCalendar(e) {
 try{
//Googlesプレッドシートを開く
var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
//新規予約された行番号を取得
var num_row = sheet.getLastRow();
//新規予約された行から名前を取得
var nname = sheet.getRange(num_row, 3).getValue();
//メールアドレスの取得
var nmail = sheet.getRange(num_row,2).getValue();
//予約を記載するカレンダーを取得
var cals = CalendarApp.getCalendarById("aaaa-u.ac.jp-aaaaaaa.calendar.google.com");
//予約の開始時間を取得
var stime = new Date(sheet.getRange(num_row, 6).getValue());
//予約の装置名を取得
var nMachine = sheet.getRange(num_row, 4).getValue();
//予約の終了時間を取得
var etime = new Date(sheet.getRange(num_row, 7).getValue());
var ndate = new Date(sheet.getRange(num_row, 5).getValue());
var ndates= new Date(ndate.getFullYear(),ndate.getMonth(),ndate.getDate(),stime.getHours(),stime.getMinutes(),0);
var ndatee= new Date(ndate.getFullYear(),ndate.getMonth(),ndate.getDate(),etime.getHours(),etime.getMinutes(),0);
// 先約の有無
var calEvents = cals.getEvents(ndates, ndatee);
var caltitle = cals.gettitle(nMachine);
// カレンダーに登録がないためそのまま登録可
if (calEvents.length === 0) {
//予約情報をカレンダーに追加
var r = cals.createEvent(thing, ndates, ndatee);
var thing =nname+" \n\n 予約に成功しました。"
MailApp.sendEmail(nmail,"予約完了",thing);
}
// カレンダーにイベントがあるので、装置に重複がないかチェック
 else {
 isEmpty = true;
 for (var i in calEvents) {
   var event = calEvents[i];
   if (event.gettitle() === nMachine) {
     isEmpty = false;
     break;
   }
 }
// カレンダーに同一装置で登録がないため登録可
 if (isEmpty) {
//予約情報をカレンダーに追加
var r = cals.createEvent(thing, ndates, ndatee);
var thing =nname+" \n\n 予約に成功しました。"
MailApp.sendEmail(nmail,"予約完了",thing);
 }
// カレンダーに同時刻同一装置で登録があるため登録不可
 else {
    var thing =nname+" \n\n 予約に失敗しました。\n\n 日時と時間を確認してください"
MailApp.sendEmail(nmail,"予約失敗のお知らせ",thing);
}
 }
} catch(exp){
//実行に失敗した時に通知
MailApp.sendEmail(nmail, exp.message, exp.message);
}
}
### 試したこと
装置の重複チェックに問題があるのかと考えて、
if(cals.getEvents(ndates, ndatee)==0){
 
var thing = nMachine;
var r = cals.createEvent(thing, ndates, ndatee);  
のみに書き直して実行すると正常に動作しました。そのため、問題点はfor文の辺りにあると分かったのですが、どこを修正すれば良いか分かりません。ご教授お願いします。
  • Google Apps Script

    2822 questions

    Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る