見出し画像

運用度アップ!- Google カレンダー を使わない!!三者面談予約 Ver.2

Ver.2 という感じです!
今回は、教師用カレンダーと保護者用のカレンダーに分けて記録する方法を紹介します!

こんな風に、

を分ける方法です!!

前回の記事からご確認ください!

前回の記事

変更点

これらの2つのプログラムの主な変更点はこんな感じです!!

他のスプレッドシートを新しく作成し、そのシートに予約ありなどを記録していく

ように変更しています👍

他のスプレッドシート(保護者用カレンダー)を取得する場合に使用する。

前回のコード↓

function onFormSubmit(e) {
  // フォームの回答を取得
  var timeStamp = e.values[0];// タイムスタンプ
  var Email = e.values[1];//メールアドレス
  var classroom = e.values[2];//クラス
  var num = e.values[3];// 児童番号
  var student = e.values[4];//児童氏名
  var name = e.values[5];// 保護者氏名
  var reserveDate = e.values[6];// 予約日
  var reserveTime = e.values[7];// 予約時間
  var remarks = e.values[8];// 備考

  var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();//スプレッドシートを有効にする
  //var sheet = SpreadsheetApp.openById('ここにスプレッドシートのID').getSheetByName('ここにシートの名前');//他のスプレッドシートを取得する場合
  var sheet = spreadsheet.getSheetByName('保護者用カレンダー');//ここから各クラスのシートを取得
  var sht = spreadsheet.getSheetByName('教師用カレンダー');//ここから各クラスのシートを取得
  var data = sheet.getDataRange().getValues();

 //該当の日時を検索して、そのカラム番号、列番号を取得
  for (var i = 0; i < data.length; i++) {
    for (var j = 0; j < data[i].length; j++) {
      if (data[i][j] == reserveDate) {
        dataColumn = j+1;
      }
      else if(data[i][j] == reserveTime){
        dataRow = i+1;
      }
      }
    }

  var schedule = sheet.getRange(dataRow,dataColumn).getValue();//保護者用のカレンダーの該当セルの値を取得
  var teachercal = sht.getRange(dataRow,dataColumn).getValue();//教師用のカレンダーの該当セルの値を取得

//保護者用カレンダーへの入力と、保護者への予約完了または失敗メールの送信
  if(schedule == ''){
    sheet.getRange(dataRow,dataColumn).setValue('予約あり');
    // 自動返信メール件名
    let Subject = name + '様 ご予約完了';
    // 自動返信メール本文
    let Body = name+ ' 様\n ' + 
    "\n" + 
    '三者面談を承りました。\n' + 
    "ありがとうございました。\n\n" + reserveDate + '\n'+ reserveTime +'\nです。';
    // メール送信
    MailApp.sendEmail(Email,Subject,Body);
  } else {
    // 自動返信メール件名
    let Subject = name + '様 ご予約失敗';
    // 自動返信メール本文
    let Body = name+'様 \n' + 
    '\n' + 
    'ご希望いただいた日程がすでに埋まっているためご予約を完了できませんでした。\n' + 
    '別の日程を再度入力いただきますようお願いいたします。\n' + 
    'ありがとうございました。';
    // メール送信
    MailApp.sendEmail(Email,Subject,Body);
  }
  
//教師用カレンダーへの入力と、教師へのリマインドメールの送信
  if(teachercal == ''){
    sht.getRange(dataRow,dataColumn).setValue(student);
    let mail = ''//送りたいアドレス 教師を想定しています。
    // 自動返信メール件名
    let Subject = student + 'さん 三者面談予約';
    // 自動返信メール本文
    let Body = student + ' さんの保護者 \n' + name + '様から三者面談の予定が入りました。\n' +
    reserveDate + '\n'+ reserveTime +'\nです。\n\n' +
    '備考\n'+remarks;
    // メール送信
    MailApp.sendEmail(mail,Subject,Body);
    return;
  }
}

↓の部分を変えます!!

  var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();//スプレッドシートを有効にする
  //var sheet = SpreadsheetApp.openById('ここにスプレッドシートのID').getSheetByName('ここにシートの名前');//他のスプレッドシートを取得する場合
  var sheet = spreadsheet.getSheetByName('保護者用カレンダー');//ここから各クラスのシートを取得
  var sht = spreadsheet.getSheetByName('教師用カレンダー');//ここから各クラスのシートを取得
  var data = sheet.getDataRange().getValues();

変更するために、教師用カレンダーと保護者用カレンダーを用意してください!!

冒頭の画像ような感じですね!

大事なのは、セルの位置というか、日時を表示するセルの場所を揃えておきましょう!👍

そして変更後のコードはこちら!

  var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();//スプレッドシートを有効にする
  var sheet = SpreadsheetApp.openById('').getSheetByName('');//他のスプレッドシートから、教師用のスプレッドシートを取得する場合
  var sht = SpreadsheetApp.openById('').getSheetByName('');//他のスプレッドシートから、保護者用のスプレッドシートを取得する場合
  var data = sheet.getDataRange().getValues();

この中にある、

openById('')

という部分に、それぞれのスプレッドシートのIDを入れます!
そして、

getSheetByName('')

の部分に、シートの名前を入れてください!

完成したコード

function onFormSubmit(e) {
  // フォームの回答を取得
  var timeStamp = e.values[0];// タイムスタンプ
  var Email = e.values[1];//メールアドレス
  var classroom = e.values[2];//クラス
  var num = e.values[3];// 児童番号
  var student = e.values[4];//児童氏名
  var name = e.values[5];// 保護者氏名
  var reserveDate = e.values[6];// 予約日
  var reserveTime = e.values[7];// 予約時間
  var remarks = e.values[8];// 備考

  var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();//スプレッドシートを有効にする
  var sheet = SpreadsheetApp.openById('').getSheetByName('');//他のスプレッドシートから、教師用のスプレッドシートを取得する場合
  var sht = SpreadsheetApp.openById('').getSheetByName('');//他のスプレッドシートから、保護者用のスプレッドシートを取得する場合
  var data = sheet.getDataRange().getValues();

  var dataRow = '';
  var dataColumn = '';

  //該当の日時を検索して、そのカラム番号、列番号を取得
  for (var i = 0; i < data.length; i++) {
    for (var j = 0; j < data[i].length; j++) {
      if (data[i][j] == reserveDate) {
        dataColumn = j + 1;
      }
      else if (data[i][j] == reserveTime) {
        dataRow = i + 1;
      }
    }
  }

  var schedule = sheet.getRange(dataRow, dataColumn).getValue();//保護者用のカレンダーの該当セルの値を取得
  var teachercal = sht.getRange(dataRow, dataColumn).getValue();//教師用のカレンダーの該当セルの値を取得

  //保護者用カレンダーへの入力と、保護者への予約完了または失敗メールの送信
  if (schedule == '') {
    sheet.getRange(dataRow, dataColumn).setValue('予約あり');
    // 自動返信メール件名
    let Subject = name + '様 ご予約完了しました';
    // 自動返信メール本文
    let Body = name + ' 様\n ' +
      "\n" +
      '三者面談を承りました。\n' +
      "ありがとうございました。\n\n" + reserveDate + '\n' + reserveTime + '\nです。';
    // メール送信
    MailApp.sendEmail(Email, Subject, Body);
  } else {
    // 自動返信メール件名
    let Subject = name + '様 ご予約失敗';
    // 自動返信メール本文
    let Body = name + '様 \n' +
      '\n' +
      'ご希望いただいた日程がすでに埋まっているためご予約を完了できませんでした。\n' +
      '別の日程を再度入力いただきますようお願いいたします。\n' +
      'ありがとうございました。';
    // メール送信
    MailApp.sendEmail(Email, Subject, Body);
  }

  //教師用カレンダーへの入力と、教師へのリマインドメールの送信
  if (teachercal == '') {
    sht.getRange(dataRow, dataColumn).setValue(student);
    let mail = ''//送りたいアドレス 教師を想定しています。
    // 自動返信メール件名
    let Subject = student + 'さん 三者面談予約';
    // 自動返信メール本文
    let Body = student + ' さんの保護者 \n' + name + '様から三者面談の予定が入りました。\n' +
      reserveDate + '\n' + reserveTime + '\nです。\n\n' +
      classroom + ' クラス' + num + '番です。\n\n' +
      '備考\n' + remarks;
    // メール送信
    MailApp.sendEmail(mail, Subject, Body);
    return;
  }
}

これで準備完了です!!

こちらで詳細を解説していますので、ご確認ください!!

Ver.1 の動画

Ver.3 の動画

Ver.4 の動画

Twitter

Facebook

ポートフォリオ

YouTube チャンネル

いちばんやさしい Google Apps Script


何かと0から1を作るのは大変だと思います。学校はどこも似たような問題課題に対応していると思います。それなのに、先生って自分だけで頑張ろうとするんですよね。ボクの資料やnoteが1になって、学校ごとの現状に合わせてカスタムしていただければと思います‼️