GoogleスプレッドシートのデータからGoogleカレンダーに一括登録するスクリプト(Google Apps Script)を作ってみました。
完成品
入力シート(シート名:create)に、スケジュールのデータを入力
スクリプトを実行すると、H列に処理結果が追記される
Googleカレンダーに予定が登録される
招待メール列に”Y”を入力したスケジュールについては、招待メールも送信される。(空白でなければ”Y”じゃなくてもOK)
スクリプト
スプレッドシートのツール > スクリプトエディタよりスクリプトエディタを起動し、コード.gsに下記のスクリプトを貼り付けます。
// カレンダー・スプレッドシートの取得
const calendar = CalendarApp.getCalendarById("xxxxxxxxxxxxxxxxxxxxxxxxxx@group.calendar.google.com");
const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("create");
function createEventsFromSheet(){
// スプレッドシートのデータ取得
const records = sheet.getDataRange().getValues();
records.shift();
// 処理結果配列
const results = [];
// イベント一括作成
for ( const record of records ){
// 任意項目の設定
const options = {};
if ( record[3] ){ options.description = record[3]; } // 説明
if ( record[4] ){ options.location = record[4]; } // 場所
if ( record[5] ){ options.guests = record[5]; } // ゲスト
if ( record[6] ){ options.sendInvites = true; } // 招待メール
// イベント作成
try {
const event = calendar.createEvent(
record[0], // タイトル
record[1], // 開始日時
record[2], // 終了日時
options
);
results.push([`成功:Event ID=${event.getId()}`]);
} catch(e) {
results.push([`失敗:${e}`]);
}
}
// 処理結果貼り付け
sheet.getRange(2,8,results.length,1).setValues(results);
}
*コード冒頭の”xxxxxxxxxxxxxxxxxxxxxxxxxx@group.calendar.google.com”部分には、イベントを登録したいカレンダーのIDを入力してください。(Googleカレンダーの「設定と共有」画面の「カレンダーの統合」部分にあるカレンダーIDです)
その後、スクリプトエディタの▷実行で実行します。
(もしくは、スプレッドシート上に図形描画でボタンを配置して、スクリプトを割り当てでcreateEventsFromSheetを割り当ててください)
コメント
このコードで更に登録済みの予定が再登録されない方法はありますか??
スプレッドシートに記載したまま次の予定を追加したいのですが、一度登録されたものまで再度登録されてしまいます、、、(涙)
不正なデータというのをどの構文で判断しているのですか?例えばタイトルが入っていない場合は登録されないというようにするにはどうしたらよいのでしょうか?