【GAS】Googleカレンダーに日付またぎ(時間指定)で登録する方法

Googleカレンダー

スプレッドシートから予定を入力する方法「全体像」

ご訪問ありがとうございます。

Googleシートマスターのひろしです。

前回

スプレッドシートからGoogleカレンダーに予定を流し込む(インポート、連携する)方法
スプレッドシートに記載した予定をGoogleカレンダーに連動させることができます。 「GASって何?」状態であってもコピペで簡単にできます。

今回は、とっても価値の高い方法をお伝えします。


これを知ることであなたは、

  • スプレッドシートに記載した予定をGoogleカレンダーに反映させることができます。
  • 日付をまたいだ予定でも反映されます。
  • GASの変更方法がわかります。


逆に、ここのとろこがわからないと

いつまで経っても、
一日単位の予定しか自動的に設定することができません。

なので、サクッとマスターして

と、答えてあげてください。

 

日付またぎ(時間指定あり)

前回の動画に対し以下の質問をいただきました。

という訳で、やってみましょう。

 

ポイントは

です。

スクリプト

/**
 * Googleカレンダーに予定を追加する
 */
function CreateSchedule() {

  // googleカレンダーの取得
  const calender = CalendarApp.getDefaultCalendar()

  // 読み取り範囲(表の始まり行と終わり列)
  const topRow = 2
  const lastCol = 8
  const statusCellCol = 1

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

  // シートを取得
  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 startday = contents[i][startdayNum]
    let startTime = contents[i][startNum]
    let endday = contents[i][enddayNum]
    let endTime = contents[i][endNum]
    let title = contents[i][titleNum]

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

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

    try {

// 終了日時を作成
      if (endday == '') {
        endday = startday
      }

      // 開始終了時刻が無ければ終日で設定
      if (startTime == '' || endTime == '') {
        //予定を作成
        calender.createAllDayEvent(
          title,
          startday,
//          endday, 
          options
        )

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

        let endDate = new Date(endday)
        endDate.setHours(endTime.getHours())
        endDate.setMinutes(endTime.getMinutes())

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

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

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

  // 完了通知
  Browser.msgBox("予定を追加しました。")
}

※上記スクリプトは、動画内のスクリプトから修正しました。
const lastCol = 8 に修正、終日の場合は正しく動作しません。

終日に対応させたい場合は、こちらをご覧ください

【GAS】Googleカレンダー 日付をまたいで予定を登録する方法
GASからGoogleカレンダーに終日の予定を作成することができます。 日付をまたいで指定することができます。

 

動画はこちら

では、今回のGoogleシートマスターへの究極の方法です。

Step1.
Googleカレンダーを開く

Step2.

サンプルシートを開き
https://technical.verybestcbp.com/e6x1コピーする

Step3.

スクリプトをコピペする

Step4.

予定を書き換え実行する

では、早速、グーグルカレンダーを
開いてください。

今すぐです。

最後までご覧いただきありがとうございます。

つぎはこちら

【GAS】スプレッドシートからGoogleカレンダーに色付きで登録する方法
スプレッドシートからGoogleカレンダーに予定を追加する際に色を設定することができます。

スプレッドシートから予定を入力する方法「全体像」
Googleカレンダー関連

コメント

タイトルとURLをコピーしました