質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.33%

  • Google Apps Script

    956questions

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

GoogleSpreadSheetでグーグルカレンダーを管理。エラーが出ていますがわかりません。

受付中

回答 2

投稿

  • 評価
  • クリップ 1
  • VIEW 252

 前提・実現したいこと

GoogleSpreadSheetでグーグルカレンダーを管理。

下記二つのサイトを参考にプログラムを組み、グーグルスプレッドシートでのグーグルカレンダー管理ができるように苦戦中です。

【Googlecalendarへの追加登録】
https://xn--t8j3bz04sl3w.xyz/spreadsheet/calendar-renkei/3703/2/
【編集・自動更新設定】
http://system.blog.uuum.jp/entry/2017/03/17/110000

エラーが出てしまったのですが、何分未熟で知識がないため
どう解決すれば良いか分からず(><)
どなたかご教授頂けますと大変助かります!!

 発生している問題・エラーメッセージ

構文エラー。(行 219、ファイル「コード」)


該当の箇所を◆◆◆で囲みました。

 該当のソースコード

/* カレンダーへイベントを登録する */
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 == "") {
  Cal = CalendarApp.getCalendarById("hitomikawasaki.mail@gmail.com");//<---ここを自分のgmailアドレスへ変更する

//指定のカレンダーIDへインベント登録
  Cal.createEvent(eventname,start,end,{location:place});//createEvent(タイトル、開始日時、終了日時、オプション)

//カレンダー登録が終わったイベントのaddedへ「登録完了」を記入
 sht.getRange(i,6).setValue("登録完了");

  }   //ifを閉じる
 }      //forを閉じる
}        //functionを閉じる

var ss = SpreadsheetApp.getActive();
var records = ss.getRange('Sheet1!A:Z').getValues();

var calApp = CalendarApp.getCalendarById('ここにカレンダーのIDを入れる');
calApp.createAllDayEvent('タイトル', new Date('3/14/2017'));

var HashSheet = function HashSheet(sheetName) {
  if (!sheetName) {
    throw new Error('sheetName must be specified');
  }
  this.sheetName = sheetName;

  this.sheet = SpreadsheetApp.getActive().getSheetByName(this.sheetName);
  if (!this.sheet) {
    throw new Error('sheet does not exist');
  }
};

HashSheet.prototype.destroy = function destroy() {
  this.sheet.getRange('A:B').clear();
};

HashSheet.prototype.read = function read() {
  var obj = {};
  var records = this.sheet.getRange('A:B').getValues();
  for (var i = 0; i < records.length; i++) {
    if (records[i][0]) {
      obj[records[i][0]] = records[i][1];
    }
  }
  return obj;
};

HashSheet.prototype.save = function save(obj) {
  var records = [];
  for (var key in obj) {
    if (!obj.hasOwnProperty(key)) {
      continue;
    }
    records.push([key, obj[key]]);
  }

  this.destroy();
  this.sheet.getRange(1, 1, records.length, 2).setValues(records);
};

var hashSheet = new HashSheet('sheet1');
var obj = hashSheet.read();
// 処理
hashSheet.save(obj);

var CalUtil = function CalUtil(calId) {
  this.calApp = CalendarApp.getCalendarById(calId);
  if (!this.calApp) {
    throw new Error('Calendar does not exist');
  }
};

CalUtil.prototype.deleteEvents = function deleteEvents() {
  var events = this.calApp.getEvents(new Date('1/1/1970'), new Date('1/1/2100'));
  for (var i = 0; i < events.length; i++) {
    events[i].deleteEvent();
  }
};

CalUtil.prototype.getEvents = function getEvents() {
  var obj = {};
  var events = this.calApp.getEvents(new Date('1/1/1970'), new Date('1/1/2100'));
  for (var i = 0; i < events.length; i++) {
    obj[events[i].getId()] = events[i];
  }
  return obj;
};

var CalSheet = function CalSheet(calId, sheetName) {
  this.calUtil = new CalUtil(calId);
  this.hashSheet = new HashSheet(sheetName);

  this.eventIds = null;
  this.events = null;

  this.sheetName = sheetName;
};

CalSheet.prototype.deleteAll = function deleteAll() {
  this.calUtil.deleteEvents();
  this.hashSheet.destroy();
};

CalSheet.prototype.getEventById = function getEventById(eventId) {
  var events = this.getEvents();
  return events[eventId];
};

CalSheet.prototype.getEventByKey = function getEventByKey(key) {
  return this.getEventById(this.getEventIdByKey(key));
};

CalSheet.prototype.getEventIdByKey = function getEventIdByKey(key) {
  return this.getEventIds()[key];
};

CalSheet.prototype.getEventIds = function getEventIds() {
  if (this.eventIds) {
    return this.eventIds;
  }

  this.eventIds = this.hashSheet.read();
  return this.eventIds;
};

CalSheet.prototype.getEvents = function getEvents() {
  if (this.events) {
    return this.events;
  }

  this.events = this.calUtil.getEvents();
  return this.events;
};

CalSheet.prototype.saveEventId = function saveEventId(key, eventId) {
  var eventIds = this.getEventIds();
  eventIds[key] = eventId;
  this.hashSheet.save(eventIds);
};

var calSheet = new CalSheet('hitomikawasaki.mail@gmail.com', 'Calendar');
var calApp = calSheet.cal;
var calEvent = calSheet.getEventByKey('キー');
if (!calEvent) {
  calEvent = calApp.createAllDayEvent('タイトル', new Date('3/14/2017'));
  calSheet.saveEventId('キー', calEvent.getId());
}

// カレンダーイベントを Spreadsheet で管理する CalSheet のインスタンス生成
var calSheet = new CalSheet('hitomikawasaki.mail@gmail.com', 'Calendar');

// CalendarApp のインスタンス
var calApp = calSheet.calUtil.calApp;

// Spreadsheet から情報を取得
var ss = SpreadsheetApp.getActive();
var records = ss.getRange('Sheet1!A:Z').getValues();

// それぞれの情報に対してカレンダーイベントの処理を行う
for (var i = 1; i < records.length; i++) {
  var record = records[i];
◆◆◆  var key = record[?]; ◆◆◆
  var title = record[?];
  var date = record[?];

  // キーとなる情報を元にカレンダーイベントを取得
  var calEvent = calSheet.getEventByKey(key);

  // カレンダーイベントが無い場合は新規作成
  if (!calEvent) {
    calEvent = calApp.createAllDayEvent(title, date);
    // イベント作成後すぐに保存。スクリプトが途中で止まっても大丈夫なように
    calSheet.saveEventId(key, calEvent.getId());
  }

  //
  // カレンダーイベントの中身を更新
  //
}
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

+1

var key = record[?];

こいつの後ろに全角スペースが入ってます。
それでエラーになってるんじゃないかと


改めて見てみたら他のヶ所にも盛大に全角スペースはいってますねー

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/07/02 23:13

    回答ありがとうございます。
    全角スペースについては、◆をいれるときに入れましたので、実際にはスペース入っていません。
    他におかしなところはみつかりませんでしょうか?

    キャンセル

  • 2018/07/02 23:23

    他の全角スペースも全部削除してみてください。
    んで、実際に動かそうとしたソースを、そのままコピペして提示してくだされ

    キャンセル

  • 2018/07/03 01:24

    ありがとうございます。
    これです。

    /* カレンダーへイベントを登録する */
    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 == "") {
      Cal = CalendarApp.getCalendarById("hitomikawasaki.mail@gmail.com");//<---ここを自分のgmailアドレスへ変更する

    //指定のカレンダーIDへインベント登録
      Cal.createEvent(eventname,start,end,{location:place});//createEvent(タイトル、開始日時、終了日時、オプション)

    //カレンダー登録が終わったイベントのaddedへ「登録完了」を記入
     sht.getRange(i,6).setValue("登録完了");

      }   //ifを閉じる
     }      //forを閉じる
    }        //functionを閉じる

    var ss = SpreadsheetApp.getActive();
    var records = ss.getRange('Sheet1!A:Z').getValues();

    var calApp = CalendarApp.getCalendarById('hitomikawasaki.mail@gmail.com');
    calApp.createAllDayEvent('タイトル', new Date('2018/07/01'));

    var HashSheet = function HashSheet(sheetName) {
    if (!sheetName) {
    throw new Error('sheetName must be specified');
    }
    this.sheetName = sheetName;

    this.sheet = SpreadsheetApp.getActive().getSheetByName(this.sheetName);
    if (!this.sheet) {
    throw new Error('sheet does not exist');
    }
    };

    HashSheet.prototype.destroy = function destroy() {
    this.sheet.getRange('A:B').clear();
    };

    HashSheet.prototype.read = function read() {
    var obj = {};
    var records = this.sheet.getRange('A:B').getValues();
    for (var i = 0; i < records.length; i++) {
    if (records[i][0]) {
    obj[records[i][0]] = records[i][1];
    }
    }
    return obj;
    };

    HashSheet.prototype.save = function save(obj) {
    var records = [];
    for (var key in obj) {
    if (!obj.hasOwnProperty(key)) {
    continue;
    }
    records.push([key, obj[key]]);
    }

    this.destroy();
    this.sheet.getRange(1, 1, records.length, 2).setValues(records);
    };

    var hashSheet = new HashSheet('sheet1');
    var obj = hashSheet.read();
    // 処理
    hashSheet.save(obj);

    var CalUtil = function CalUtil(calId) {
    this.calApp = CalendarApp.getCalendarById(calId);
    if (!this.calApp) {
    throw new Error('Calendar does not exist');
    }
    };

    CalUtil.prototype.deleteEvents = function deleteEvents() {
    var events = this.calApp.getEvents(new Date('19701/01'), new Date('2100/01/01'));
    for (var i = 0; i < events.length; i++) {
    events[i].deleteEvent();
    }
    };

    CalUtil.prototype.getEvents = function getEvents() {
    var obj = {};
    var events = this.calApp.getEvents(new Date('1970/01/01'), new Date('210001/01'));
    for (var i = 0; i < events.length; i++) {
    obj[events[i].getId()] = events[i];
    }
    return obj;
    };

    var CalSheet = function CalSheet(calId, sheetName) {
    this.calUtil = new CalUtil(calId);
    this.hashSheet = new HashSheet(sheetName);

    this.eventIds = null;
    this.events = null;

    this.sheetName = sheetName;
    };

    CalSheet.prototype.deleteAll = function deleteAll() {
    this.calUtil.deleteEvents();
    this.hashSheet.destroy();
    };

    CalSheet.prototype.getEventById = function getEventById(eventId) {
    var events = this.getEvents();
    return events[eventId];
    };

    CalSheet.prototype.getEventByKey = function getEventByKey(key) {
    return this.getEventById(this.getEventIdByKey(key));
    };

    CalSheet.prototype.getEventIdByKey = function getEventIdByKey(key) {
    return this.getEventIds()[key];
    };

    CalSheet.prototype.getEventIds = function getEventIds() {
    if (this.eventIds) {
    return this.eventIds;
    }

    this.eventIds = this.hashSheet.read();
    return this.eventIds;
    };

    CalSheet.prototype.getEvents = function getEvents() {
    if (this.events) {
    return this.events;
    }

    this.events = this.calUtil.getEvents();
    return this.events;
    };

    CalSheet.prototype.saveEventId = function saveEventId(key, eventId) {
    var eventIds = this.getEventIds();
    eventIds[key] = eventId;
    this.hashSheet.save(eventIds);
    };

    var calSheet = new CalSheet('hitomikawasaki.mail@gmail.com', 'Calendar');
    var calApp = calSheet.cal;
    var calEvent = calSheet.getEventByKey('キー');
    if (!calEvent) {
    calEvent = calApp.createAllDayEvent('タイトル', new Date('2018/07/01'));
    calSheet.saveEventId('キー', calEvent.getId());
    }

    // カレンダーイベントを Spreadsheet で管理する CalSheet のインスタンス生成
    var calSheet = new CalSheet('hitomikawasaki.mail@gmail.com', 'Calendar');

    // CalendarApp のインスタンス
    var calApp = calSheet.calUtil.calApp;

    // Spreadsheet から情報を取得
    var ss = SpreadsheetApp.getActive();
    var records = ss.getRange('Sheet1!A:Z').getValues();

    // それぞれの情報に対してカレンダーイベントの処理を行う
    for (var i = 1; i < records.length; i++) {
    var record = records[i];
    var key = record[i];
    var title = record[i];
    var date = record[i];

    // キーとなる情報を元にカレンダーイベントを取得
    var calEvent = calSheet.getEventByKey(key);

    // カレンダーイベントが無い場合は新規作成
    if (!calEvent) {
    calEvent = calApp.createAllDayEvent(title, date);
    // イベント作成後すぐに保存。スクリプトが途中で止まっても大丈夫なように
    calSheet.saveEventId(key, calEvent.getId());
    }

    //
    // カレンダーイベントの中身を更新
    //
    }

    キャンセル

0

for (var i = 1; i < records.length; i++) {
  var record = records[i];
  var key = record[i];
  var title = record[i];
  var date = record[i];
}


この部分ですが、このforで指定されているiは行数を指しています。
そのため、recordはスプレッドシートの各行の配列です。
よって、key, title, dateに指定されている配列番号には列番号を指定する必要があります。

おそらく固定だと思いますので、key, title, dateが入っている列番号をそれぞれ記入してやればいいと思います。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/07/03 22:14

    ありがとうございます!
    該当箇所を変更してみました。

    以下のようになったのですが、今度はまた違うエラーが出ました。
    デバッグ?というボタンを押してみたら、いろいろと出てきました。
    追加で質問申し訳ないですが、もしわかるようでしたらお教えいただけると幸いです。

    /* カレンダーへイベントを登録する */
    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 == "") {
      Cal = CalendarApp.getCalendarById("hitomikawasaki.mail@gmail.com");//<---ここを自分のgmailアドレスへ変更する

    //指定のカレンダーIDへインベント登録
      Cal.createEvent(eventname,start,end,{location:place});//createEvent(タイトル、開始日時、終了日時、オプション)

    //カレンダー登録が終わったイベントのaddedへ「登録完了」を記入
     sht.getRange(i,6).setValue("登録完了");

      }   //ifを閉じる
     }      //forを閉じる
    }        //functionを閉じる

    var ss = SpreadsheetApp.getActive();
    var records = ss.getRange('Sheet1!A:Z').getValues();

    var calApp = CalendarApp.getCalendarById('hitomikawasaki.mail@gmail.com');
    calApp.createAllDayEvent('タイトル', new Date('2018/07/01'));

    var HashSheet = function HashSheet(sheetName) {
    if (!sheetName) {
    throw new Error('sheetName must be specified');
    }
    this.sheetName = sheetName;

    this.sheet = SpreadsheetApp.getActive().getSheetByName(this.sheetName);
    if (!this.sheet) {
    throw new Error('sheet does not exist');
    }
    };

    HashSheet.prototype.destroy = function destroy() {
    this.sheet.getRange('A:B').clear();
    };

    HashSheet.prototype.read = function read() {
    var obj = {};
    var records = this.sheet.getRange('A:B').getValues();
    for (var i = 0; i < records.length; i++) {
    if (records[i][0]) {
    obj[records[i][0]] = records[i][1];
    }
    }
    return obj;
    };

    HashSheet.prototype.save = function save(obj) {
    var records = [];
    for (var key in obj) {
    if (!obj.hasOwnProperty(key)) {
    continue;
    }
    records.push([key, obj[key]]);
    }

    this.destroy();
    this.sheet.getRange(1, 1, records.length, 2).setValues(records);
    };

    var hashSheet = new HashSheet('sheet1');
    var obj = hashSheet.read();
    // 処理
    hashSheet.save(obj);

    var CalUtil = function CalUtil(calId) {
    this.calApp = CalendarApp.getCalendarById(calId);
    if (!this.calApp) {
    throw new Error('Calendar does not exist');
    }
    };

    CalUtil.prototype.deleteEvents = function deleteEvents() {
    var events = this.calApp.getEvents(new Date('19701/01'), new Date('2100/01/01'));
    for (var i = 0; i < events.length; i++) {
    events[i].deleteEvent();
    }
    };

    CalUtil.prototype.getEvents = function getEvents() {
    var obj = {};
    var events = this.calApp.getEvents(new Date('1970/01/01'), new Date('210001/01'));
    for (var i = 0; i < events.length; i++) {
    obj[events[i].getId()] = events[i];
    }
    return obj;
    };

    var CalSheet = function CalSheet(calId, sheetName) {
    this.calUtil = new CalUtil(calId);
    this.hashSheet = new HashSheet(sheetName);

    this.eventIds = null;
    this.events = null;

    this.sheetName = sheetName;
    };

    CalSheet.prototype.deleteAll = function deleteAll() {
    this.calUtil.deleteEvents();
    this.hashSheet.destroy();
    };

    CalSheet.prototype.getEventById = function getEventById(eventId) {
    var events = this.getEvents();
    return events[eventId];
    };

    CalSheet.prototype.getEventByKey = function getEventByKey(key) {
    return this.getEventById(this.getEventIdByKey(key));
    };

    CalSheet.prototype.getEventIdByKey = function getEventIdByKey(key) {
    return this.getEventIds()[key];
    };

    CalSheet.prototype.getEventIds = function getEventIds() {
    if (this.eventIds) {
    return this.eventIds;
    }

    this.eventIds = this.hashSheet.read();
    return this.eventIds;
    };

    CalSheet.prototype.getEvents = function getEvents() {
    if (this.events) {
    return this.events;
    }

    this.events = this.calUtil.getEvents();
    return this.events;
    };

    CalSheet.prototype.saveEventId = function saveEventId(key, eventId) {
    var eventIds = this.getEventIds();
    eventIds[key] = eventId;
    this.hashSheet.save(eventIds);
    };

    var calSheet = new CalSheet('hitomikawasaki.mail@gmail.com', 'Calendar');
    var calApp = calSheet.cal;
    var calEvent = calSheet.getEventByKey('キー');
    if (!calEvent) {
    calEvent = calApp.createAllDayEvent('タイトル', new Date('2018/07/01'));
    calSheet.saveEventId('キー', calEvent.getId());
    }

    // カレンダーイベントを Spreadsheet で管理する CalSheet のインスタンス生成
    var calSheet = new CalSheet('hitomikawasaki.mail@gmail.com', 'Calendar');

    // CalendarApp のインスタンス
    var calApp = calSheet.calUtil.calApp;

    // Spreadsheet から情報を取得
    var ss = SpreadsheetApp.getActive();
    var records = ss.getRange('Sheet1!A:Z').getValues();

    // それぞれの情報に対してカレンダーイベントの処理を行う
    for (var i = 1; i < records.length; i++) {
    var record = records[i];
    var key = record[A];
    var title = record[B];
    var date = record[C];

    // キーとなる情報を元にカレンダーイベントを取得
    var calEvent = calSheet.getEventByKey(key);

    // カレンダーイベントが無い場合は新規作成
    if (!calEvent) {
    calEvent = calApp.createAllDayEvent(title, date);
    // イベント作成後すぐに保存。スクリプトが途中で止まっても大丈夫なように
    calSheet.saveEventId(key, calEvent.getId());
    }

    //
    // カレンダーイベントの中身を更新
    //
    }

    キャンセル

  • 2018/07/03 22:17

    キャプチャはここ添付できないんですね・・・
    コピペしたらものすごく読みにくくなってしまいます。どうしたらいいのでしょう?

    キャンセル

  • 2018/07/04 08:59

    追記修正するか、新たに質問を作成してください。

    また、エラー内容は全て記載するようにしてください。
    (いちいち実行するわけではないので)

    キャンセル

  • 2018/07/04 09:52

    ちなみに、配列にA,B,Cと指定されていますが、1,2,3のように列番号を指定してくださいね。
    (そもそも配列、ご存知ないですか??)

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.33%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る

  • Google Apps Script

    956questions

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