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

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

1.スプレッドシートに画像のように予定表を作ります。
![スクリーンショット 0006-09-16 10.04.08 (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3880604/70f8fd17-f03a-3442-6b98-ec1fef1d3d14.png)

2.以下のコードを、「拡張機能」→「Apps Script」にコピペしてください。
※色の指定はメインの予定表なら機能すると思います。
※１箇所だけ設定が必要で、登録したいカレンダーのIDが必要です。
```javascript: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メソッドでポップアップ表示する
}
  ```

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