0
1

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 1 year has passed since last update.

GASでスプレッドシートに書き込んだイベントをカレンダーに追加するコードを書いた話

Last updated at Posted at 2022-11-30

概要

Googleカレンダーに同じ名前のイベントを説明欄の内容を変えて作成したいと思ったから、スプレッドシートに日付と説明を入力し、横のUpdateボタンを押すと指定した日付にイベントが作成されるコードを書いた
image.png

おまけとしてイベントに割り振られる色をORANGEと指定してある
また、日付と説明を入力し、GoogleAppsScriptによってカレンダーにイベントとして追加された行について、イベントが追加済みであることを明示する列(Added列)を用意した

実装の流れ

以下、実装の流れを軽く説明する

1. スプレッドシートを作成

スプレッドシートを作成し、日付を入力する列(Date)、説明を入力する列(Description)、イベントとしてカレンダーに追加済みであるかを明示する列(Added)を作成
ある行について、その行のイベントがカレンダーに追加済みの場合、その行のAdded列にTRUEが表示される
image.png

2. スクリプトエディタでコーディング

上部メニューの「拡張機能」の「App Scirpt」からスクリプトエディタに飛ぶ
以下のソースコードを入力する
image.png

ソースコード

function registCalenderEvent(){
  let myCalendar = CalendarApp.getCalendarById("MAILADDRESS"); //自分のメアドを入力
  let sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("SHEETNAME"); //使うシートの名前を入力
  const now = new Date(); //現在時刻を取得
  for(let i = 0; i < sheet.getLastRow() - 1; i++){
    const TF = sheet.getRange(i + 2, 3).getDisplayValue(); //スプレッドシートのある行に対して、それのイベントが作成済みであるかを確認する変数を宣言
    if(TF == "TRUE"){
      continue; //イベント作成済みならcontinue
    } else {
      const data1 = sheet.getRange(i + 2, 1).getDisplayValue(); //スプレッドシートから日付を取得
      const data2 = sheet.getRange(i + 2, 2).getDisplayValue(); //スプレッドシートから説明欄に入力する説明を取得
      const data3 = sheet.getRange(i + 2, 3); //イベント作成済みであるか否かを判別するセルの参照を変数に割り当てる
      const TargetDate = new Date(data1); //Date型のオブジェクトに変換
      TargetDate.setFullYear(now.getFullYear()); //スプレッドシートから取得した日付に現在の西暦を設定
      const options1 = {
        description: "説明 : \n" + data2 //説明欄に記入する内容を格納するオブジェクトを宣言
      }
      myCalendar.createAllDayEvent("O", TargetDate, options1);
      const options2 = {
        search: "説明 : \n" //作成したイベントを探す為の文字列を格納するオブジェクトを宣言
      }
      let createdEvents = myCalendar.getEventsForDay(TargetDate, options2); //色を割り振る為に、作成されたイベントを取得
      createdEvents[0].setColor("6"); //イベントにORANGEカラーを割り当てる
      data3.setValue("TRUE"); //イベントが作成済みであることを示す文字列をスプレッドシートに追加
    }
  }
}

参考 : 公式リファレンス(英語)

3. スクリプトを実行しやすくする為にスプレッドシート上にボタンを配置

上部メニューの「挿入」の「図形描画」からボタンのデザインを決定し、作成したボタンの右上の三点リーダーから「スクリプトの割り当て」を選択し、先程作成した関数名を選択
ついでに、条件付き書式でAdded列の各セルについて、値が挿入されているときに色を付けるようにした
image.png

これで作成したボタンを押すだけでスクリプトが実行されるようになった

0
1
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
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?