毎月の予定を入力するのが面倒・・・
保育園のスケジュール表を毎月もらいますが、これをGoogleカレンダーに1つずつ入力するのは面倒な作業です!しかし、入力していないと忘れ物をします
忘れないために毎月登録して、夫婦で共有しています
前々から一括入力したいと思っていました!!今回はGASを学んだので、こちらを使って一括入力していきます
実装イメージ
実装結果
スプレッドシートを手で修正しているため、完全に自動化とは言いませんが、それでも一括登録できて本当に楽になりました嬉しい
他にも年間予定表があるので、こちらも一括登録したいと思っています。
実装環境
GAS
Googleスプレッドシート
Microsoft365
手順
Microsoft365で画像からExcelに表を抽出する
Excelになりました。(なぜか後半の日付が入っていません・・・)
このままでは自分の子供クラス以外もあるため、自分の子供だけを抽出しました。(ここは手作業です・・・)
GoogleスプレッドシートからGASを開いてスクリプトを入力する
こちらの記事のスクリプトコードを参考にさせてもらいました。
同じようにスケジュール項目を設定しました。
(今度は、子供スケジュールに合わせた項目にして手作業を削減したい)
コード
/**
* 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スプレッドシートから実行
最後に
実装結果にも書きましたが、一活してスケジュール登録できて負担が減りました
今回は保育園でしたが、次は小学校の予定表をやりたいと思います。
この一括登録機能はママたちに喜ばれること間違いなしですね!
今回は、手作業が入ってしまいましたが、もう少し作業を減らしていく方法を考えたいと思います