スプレッドシートからGoogleカレンダーに予定を流し込む(インポートする)方法

応用

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

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

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

前回

スプレッドシートからGoogleカレンダーに予定を登録する方法(GAS)
スプレッドシートからGoogleカレンダーに終日の予定を追加できます。 スプレッドシートから予定の削除もできます。

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


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

  • スプレッドシートに記載した予定をGoogleカレンダーに反映させることができます。
  • 「GASって何?」状態であってもコピペで簡単にできます。


逆に、知らないと

Googleカレンダーに
チマチマと予定を1つづつ
入力するという、なんとも残念な
作業が永遠に続きます。

せっかく便利なGoogleカレンダーなのに
残念な作業をしていたのでは、本末転倒です。

さくっと、スプレッドシートから
予定を流し込みこんな感じで答えてあげてください。

 

では、マインドセットします。

マインドセット
Googleカレンダーにまとまった予定を
一つづつ入れたら負け

 

Googleカレンダーに予定をまとめて入力する際は、
ぜひ、スプレッドシートから入力してください。

以下のように入力するだけで


※クリックするとシートが開きます。

こんなふうにGoogleカレンダーに
展開されます。

 

 

では、動画をご覧ください。

動画はこちら

★Googleカレンダーに複数の予定をまとめて入力する方法(Googleスプレッドシート)[字幕あり]

 

スクリプト

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

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

  // 読み取り範囲(表の始まり行と終わり列)
  const topRow = 2
  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])

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

        // 開始終了時刻があれば範囲で設定
      } 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())

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

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

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

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

 

 

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

Step1.
Googleカレンダーを開く

Step2.

サンプルシートを開き
https://technical.verybestcbp.com/e6x1
シートをコピーする
Step3.
スクリプトをコピペする
Step4.
予定を書き換え実行する

 

早速、Googleカレンダーを
開いてください。

今すぐです。

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

さらに色の追加やカレンダーを指定したい場合はこちら

スプレッドシートからGoogleカレンダーに予定を流し込む(インポートする)方法2(色、カレンダーの指定あり)
コピペでスプレッドシートからGoogleカレンダーに予定を追加する仕組みを作ることができます。 色の指定やカレンダーを指定することができます。スクリプトの登録方法がわかります

スクリプトの中身について知りたい場合はこちら

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

Googleカレンダー関連

 

コメント

  1. ash より:

    予定ごとに色をつけたい場合はどの様にすればいいですか?

  2. プログラミングにハマってます より:

    YouTube拝見し、楽しく勉強させていただいております。
    質問させていただきます。
    ①スプレッドシートに入力した項目に変更があった場合のカレンダーへの反映
    ②登録した内容を削除したい場合
    はどのようにすれば良いでしょうか?
    ご教示ください。よろしくお願い致します。

    • hiroshi より:

      質問ありがとうございます。
      いい質問ですね。確かに考えられるシュチュエーションです。
      ただ、かっこよく変更するためには、作成時にその予定のIDを
      一覧に保持する必要があるので、それなりに工数がかかります。

      運用でカバーするのであれば「削除→追加」という流れになります。

      予定の削除は、
      https://technical.verybestcbp.com/registfromsheet/
      に「Googleカレンダーから削除」するロジックがあります。

      なので例えば、上記の削除するロジックを使用し以下の処理を追加します。

      【DeleteEvent() 予定削除ルーチン】
      ①「DEL」の文字列を行の予定を削除する。
      ②「DEL」の文字列を削除する

      そうすれば、予定を変更する場合、ユーザーは
      ①変更する予定の「済」を「DEL」に変更する
      ②DeleteEvent()を実行し、変更したい予定を削除する
      ③「DEL」が消えた行を新しい予定に変更する
      といった感じで実現できます。

  3. プログラミングにハマってます より:

    ご回答いただきありがとうございます。
    予定削除はそれを使えば良いのですね!確かに、ご教示いただいた内容で作成できそうです!

    ありがとうございます!

    • hiroshi より:

      あ、すみません。
      【DeleteEvent() 予定削除ルーチン】は、その日の予定をすべて
      削除してしまいました。
      個別の予定を削除するには、やはり予定作成時にeventidをシート上に
      保持しておく必要がありますね。
      今度、時間があるときに試します。

  4. プログラミングにハマってます より:

    スプレッドシートからGoogleカレンダーに新規で追加した予定の「変更・削除」を是非、動画にあげて解説いただけると助かります!
    一括削除など他のサイトで掲載されているものの、あまり現実的ではないものの方が多く…

    楽しみに待っています!!
    よろしくお願いいたします。

  5. より:

    就活のスケジュール管理で本当に助かっております
    ありがとうございました

  6. たか より:

    カレンダー反映の際に日付が1日前にずれるのですが、原因は何になるでしょうか?

    • hiroshi より:

      たか さん コメントありがとうございます。
      一旦、旧エディターに戻し
      「プロジェクトのプロパティ」ー「タイムゾーン」が
      (GMT+09:00) 東京 になっているか確認してみてください。
      →https://technical.verybestcbp.com/calset/
      https://youtu.be/4qPFuM-bbJg?t=412

  7. Nautilus より:

    分かりやすい動画をありがとうございます。
    実際に動画の通りにやってみたのですが、下記のエラーが出ます。
    TypeError: startTime.getHours is not a function

    この場合はどおすればいいのでしょうか?

    • 匿名 より:

      解決しました。

      • hiroshi より:

        Nautilus さん
        ご連絡ありがとうございます。

        おそらく同様のエラーが発生している方が
        いらっしゃると思うので、できましたら、
        修正箇所をおしえてください。

  8. より:

    HPを拝見させて頂きました。初めてパソコンに触る初心者です。

    分かりやすく書いて頂けたのでできたのですが自分用にいじっていたら反映された場合に出る【済】が出なくなってしまいました。

    行や列の並びは変えてないのですが非表示にした列はあります。

    それが原因でしょうか?

    文章書くのが下手ですいません。

    • hiroshi より:

      森さんコメントありがとうございます。

      何をどういじって、どういう現象なのかわからないので、
      シートそのものを見ないとちょと難しいですね。

      いっその事、最初からやったほうがいいかと思います。

  9. 田中 より:

    2023/04/01 9:00 10:00 朝食
    2023/04/01 12:00 13:00 昼食

    のように1日に複数の予定を入力すると一番上の予定だけカレンダー上に反映されるのですが、何か解決法がありましたらご教授いただけるとありがたいです。

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