LoginSignup
37
22

保育園の予定表をGoogleカレンダーに一括登録したらとても便利だった!!

Last updated at Posted at 2023-06-12

毎月の予定を入力するのが面倒・・・

保育園のスケジュール表を毎月もらいますが、これをGoogleカレンダーに1つずつ入力するのは面倒な作業です!しかし、入力していないと忘れ物をします:expressionless:
忘れないために毎月登録して、夫婦で共有しています:thumbsup:
前々から一括入力したいと思っていました!!今回はGASを学んだので、こちらを使って一括入力していきます:relieved:

実装イメージ

画像からExcelに表を抽出.png

実装結果

スプレッドシートを手で修正しているため、完全に自動化とは言いませんが、それでも一括登録できて本当に楽になりました:grin:嬉しい:heart_eyes:
他にも年間予定表があるので、こちらも一括登録したいと思っています。

実装環境

GAS
Googleスプレッドシート
Microsoft365

手順

Microsoft365で画像からExcelに表を抽出する

画像から表へを選択してExcelに変換します。
IMG_4648.jpeg

Excelになりました。(なぜか後半の日付が入っていません・・・)
このままでは自分の子供クラス以外もあるため、自分の子供だけを抽出しました。(ここは手作業です・・・)
スクリーンショット 2023-06-12 13.43.49.png

GoogleスプレッドシートからGASを開いてスクリプトを入力する

ここでGoogleスプレッドシートへ変換します。
スクリーンショット 2023-06-12 23.21.51.png

GoogleスプレッドシートからGASを開きます。
スクリーンショット 2023-06-12 13.49.03.png

GASでスクリプトを開きます。
スクリーンショット 2023-06-12 13.49.24.png

こちらの記事のスクリプトコードを参考にさせてもらいました。
同じようにスケジュール項目を設定しました。
(今度は、子供スケジュールに合わせた項目にして手作業を削減したい)

コード
コード.js
/**
 * 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スプレッドシートから実行

スクリーンショット 2023-06-12 13.55.54.png

最後に

実装結果にも書きましたが、一活してスケジュール登録できて負担が減りました:grin:
今回は保育園でしたが、次は小学校の予定表をやりたいと思います。
この一括登録機能はママたちに喜ばれること間違いなしですね!
今回は、手作業が入ってしまいましたが、もう少し作業を減らしていく方法を考えたいと思います:thumbsup:

37
22
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
37
22