3
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Last updated at Posted at 2018-06-05

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

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

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

/* カレンダーへイベントを登録する */
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("Gmailアドレス");//<---ここを自分のgmailアドレスへ変更する

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

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

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

/--編集できるようにする--/
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;

// カレンダーイベントを Spreadsheet で管理する CalSheet のインスタンス生成
var calSheet = new CalSheet('Gmailアドレス', '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());
}

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

宜しくお願い致しますm(__)m

3
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?