0
0

GASでスプレッドシートに書いた予定をgoogleカレンダーに追加

Last updated at Posted at 2024-09-16

ごみ収集カレンダーの予定をgoogleカレンダーに一気に登録したくて、作ってみました。
普通に予定表をエクセルなどから貼り付けても使えますし、一気に予定を追加するのに便利だと思います。

1.スプレッドシートに画像のように予定表を作ります。
スクリーンショット 0006-09-16 10.04.08 (1).png

2.以下のコードを、「拡張機能」→「Apps Script」にコピペしてください。
※色の指定はメインの予定表なら機能すると思います。
※1箇所だけ設定が必要で、登録したいカレンダーのIDが必要です。

GAS
function googleカレンダーに予定を追加する() {

  // googleカレンダーの取得(追加したいカレンダーのIDを設定からコピーして入れてね)
  const calender = CalendarApp.getOwnedCalendarById("カレンダーID.google.com")

  // 読み取り範囲(表の始まり行と終わり列)
  const topRow = 3 //始まりの行
  const lastCol = 7 //終わりの列
  const statusCellCol = 1 //追加「済」が入る列

  // 予定の一覧バッファ内の列(0始まり)
  const statusNum = 0
  const dayNum = 1
  const startNum = 2
  const endNum = 3
  const titleNum = 4
  const locationNum = 5
  const descriptionNum = 6

  // シートを取得
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet()

  // 予定の最終行を取得
  let lastRow = sheet.getLastRow()

  //予定の一覧をバッファに取得
  const contents = sheet.getRange(topRow, 1, sheet.getLastRow(), lastCol).getValues()

  //順に予定を作成
  for (let i = 0; i <= lastRow - topRow; i++) {

    //「済」の場合は無視する
    if (contents[i][statusNum] === "") {
      continue
    }

    // 値をセット 日時はフォーマットして保持

    let day = contents[i][dayNum]
    let startTime = contents[i][startNum]
    let endTime = contents[i][endNum]
    let title = contents[i][titleNum]

    // 場所と詳細をセット
    let options = { location: contents[i][locationNum], description: contents[i][descriptionNum] }

    console.log(day + " " + contents[i][titleNum])

    // 色の指定
    if (title === 'もえるごみ') {
      title = "もえるごみ";
      var color = "5"
    } else if (title === '古紙類') {
      title = "古紙類";
      var color = "3";
    } else {
      var color = "1";
    }

    try {
      // 開始終了時刻が無ければ終日で設定
      if (startTime == '' || endTime == '') {

        //予定を作成
        // カレンダーに終日のイベントを作成

        var event

        calender.createAllDayEvent(title, day).setColor(color);
        // 開始終了時刻があれば範囲で設定
      } else {
        // 開始日時を作成
        let startDate = new Date(day)
        startDate.setHours(startTime.getHours())
        startDate.setMinutes(startTime.getMinutes())

        // 終了日時を作成
        let endDate = new Date(day)
        endDate.setHours(endTime.getHours())
        endDate.setMinutes(endTime.getMinutes())

        // 色の指定
        if (title === 'もえるごみ') {
          title = "もえるごみ";
          var color = "2"
        } else if (title === '古紙類') {
          title = "古紙類";
          var color = "3";
        } else {
          var color = "1";
        }

        // 予定を作成
        calender.createEvent(
          title,
          startDate,
          endDate,
          options
        ).setColor(color);
      }

      //予定が作成されたら「済」にする
      sheet.getRange(topRow + i, statusCellCol).setValue("")

      // エラーの場合ログ出力する
    } catch (e) {
      Logger.log(e)
    }
  }

  // 完了通知
  var msg = "googleカレンダーに予定を追加しました。";
  var title = "通知";
  var sec = 3;//マイナスでずっと表示
  SpreadsheetApp.getActiveSpreadsheet().toast(msg, title, sec);//toastメソッドでポップアップ表示する
}

スプレッドシート上にボタンを追加してマクロを登録するか、拡張機能からマクロをインポートして使用してください。
テストする際は、少しずつ登録してください。一気に登録すると間違っていた場合に削除が大変です。

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