見出し画像

スプレッドシートの勉強スケジュールをGoogleTasksにGASで追加


とある資格をとりたいなーと思っているのですが、

その資格は出題範囲が膨大で年一回しか試験がないため、長期的かつ計画的に勉強する必要があります。

自分はそもそも計画的に勉強する方法が分からなかったので、勉強法に関する本や記事を色々読んだところ、「紙一枚勉強法」という本に「大量記憶表」という下記の表があり、

「紙一枚勉強法」の表


本ではこれをエクセルや紙で管理していますが、
スプレッドシートにダウンロードして、GASからグーグルカレンダーに予定として流し込めば、一目でいつ何をやるか分かるし、通知もされて便利そうだと思いました。

しかしGASの完成後に、GoogleTasksのほうが、カレンダーからも見れる上、終了したタスクも管理できそうなのでそちらに軌道修正。

function todo() {

//タスクリストとIDを調べる
 let tasks = Tasks.Tasklists.list()
 let items = tasks.items
 Logger.log(items)

//↑で調べたタスクを追加するリストのID
 let id = '******'
// シートを取得
 let sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Sheet1')

//A列の最終行を取得 
 let lastRow = sheet.getRange(sheet.getMaxRows(), 1).getNextDataCell(SpreadsheetApp.Direction.UP).getRow()

//2行目から最終行までループ
let i = 2

  while(i < lastRow){

//勉強する項目名と問題数をタイトルとして結合
//A列の取得
   let name = sheet.getRange(i,1,1,1).getDisplayValue()
   let count = sheet.getRange(i,2,1,1).getDisplayValue()
   let contents = name+" "+count+"問"
//タイトルのセット  
   let title = contents
   Logger.log(title)
//日付の取得  
   for(let j=0;j<17;j++){
     let day_string = sheet.getRange(i,3,1,17).getDisplayValues().flat()

    let days = new Date(day_string[j].toString())

    let timezone = Session.getScriptTimeZone()
    let RFC3339format = "yyyy-MM-dd'T'09:00:00.SXXX"
    let newDate = Utilities.formatDate(days, timezone, RFC3339format)

 //今日の日付より古い日付は無視
   let today = Utilities.formatDate(new Date(), timezone, RFC3339format)
   if(newDate<today){
      continue
 }
//「済」の場合も無視する
  if(sheet.getRange(i,20).getValue == "済") {
      continue
 }
//予定を作成
    const task = {
    title,
    due:newDate 
  }
    let make_task=Tasks.Tasks.insert(task, id)
    Logger.log(newDate)

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

}
     i=i+2
}
}

自分は日付行を二段にしているので、1行飛ばしにするため、+2でループ。


実行するとこんな感じで指定の日付に予定として入れる事ができました。
完了後のタスクも取得して表に落とし込めるようにしたいので、まだ試行錯誤中です。


(サムネイルをお借りしました↓)

この記事が気に入ったらサポートをしてみませんか?