문계에서도 알 수 있는, GAS에 의한 수업 통지의 LINE bot의 작성 그 ② ~GAS와 스프레드시트의 제휴, 일자의 포맷~

문장에서도 알 수 있는, GAS에 의한 수업 통지의 LINE bot의 작성 그 ① 의 계속입니다.
  • 문계에서도 알 수 있는, GAS에 의한 수업 통지의 LINE bot의 작성 그 ① ~GAS를 사용한 LINE bot의 작성~
  • 문계에서도 알 수있는, GAS에 의한 수업 통지의 LINE bot의 작성 그 ② ~ GAS와 스프레드 시트의 제휴, 일자의 포맷 ~
  • 문계에서도 알 수 있는, GAS에 의한 수업 통지의 LINE bot의 작성 그 ③

  • 문장에서도 알 수 있는, GAS에 의한 수업 통지의 LINE bot 작성

  • 이 기사에서 이해


  • GAS와 스프레드 시트의 연계 및 정보를 얻는 방법
  • 날짜 형식을 지정하는 방법
  • 연관 배열에 대하여

  • 이번에 할 일


  • GAS와 스프레드 시트의 연계
  • 요건②「월요일 4한」등을 입력하면 그 시간의 수업의 정보를 돌려주는 기능의 추가
    a. 수업 정보를 얻는 함수 만들기
    b. 요일과 시간이 메시지로 보내졌을 때, 그 정보를 돌려주는 코드를 function doPost(e)에 추가



  • GAS와 스프레드시트의 연계에 대한 자세한 설명



    이 기사를 이해하기 쉽습니다.
    htps : //가 되어-t. 이 m /가 s-sp 레어 d

    수업 정보를 얻는 함수 만들기



    우선 실제 코드에서

    Code.gs
    //★★スプレッドシートID★★
    var ss = SpreadsheetApp.openById("スプレッドシートIDを入れてください");
    //★★シート名★★
    var sheet = ss.getSheetByName("シート名を入れてください");
    
    function doPost(e){
    //中身省略
    }
    
    //パラメータで授業名が入っているセルの行番号と列番号を取得
    function getClassInfo(rowNum, dateColumn){
     //授業名を取得
      var className = sheet.getRange(rowNum, dateColumn).getValue();
     //授業の曜日
      var classDay = sheet.getRange(1, dateColumn).getValue();
     //何時間目か
      var classNum = sheet.getRange(rowNum, 1).getValue();
      //始業時間
      var startTime = Utilities.formatDate( sheet.getRange(rowNum + 1, 1).getValue(), 'Asia/Tokyo', 'HH:mm');
     //終業時間
      var endTime = Utilities.formatDate( sheet.getRange(rowNum + 3, 1).getValue(), 'Asia/Tokyo', 'HH:mm');
     //授業のzoomID
      var zoomID = sheet.getRange(rowNum + 1, dateColumn).getValue();
      //zoomのパスワード
      var zoomPass = sheet.getRange(rowNum + 2, dateColumn).getValue();
     全ての情報を連想配列に入れる
      var classInfos = {className: className, classDay: classDay, classNum: classNum, startTime: startTime, endTime: endTime, zoomID: zoomID, zoomPass: zoomPass};
      return classInfos;
    }
    

    수업명이 쓰여 있는 셀을 기준으로 다른 정보도 취득하고 있습니다. 예를 들면, ZoomID가 쓰고 있는 것은 수업명의 일렬 아래이기 때문에, (rowNum + 1, dateColumn) 의 위치등.

    또, 시간의 취득에 관해서는, 스프레드 시트로 「18:00」등과 시간만 하고 있으면, 날짜가 마음대로 1899년 12월 30일이 되어, 취득되는 정보도 날짜를 포함한 상태가 되기 때문에 , Utilities.formatDate(日時、タイムゾーン、フォーマット) 에서 "18:00"만 표시되도록 합니다.

    그리고 모든 정보를 연상 배열(후술)에 넣어, return classInfos`` で戻り値として指定することで、

    요일과 시간이 메시지로 보내졌을 때, 그 정보를 돌려주는 코드를 function doPost(e) 에 추가



    완성된 코드는 이쪽

    Code.gs
    function doPost(e) {
      var event = JSON.parse(e.postData.contents).events[0];
      var returnMessage = "曜日と時限(半角:1〜7)を指定してね!\n次の授業が知りたいときは、「次」と入力してね!";
      if(event.source.userId == user_id){
        //返信するためのトークン取得
        var reply_token= event.replyToken;
        if (typeof reply_token === 'undefined') {
          return;
        }
        //以下今回追加したコード
      //テキストメッセージの内容を取得
        var message = event.message.text;
        for(let i=3; i<=7; i ++) {
          var dateColumn = i;
        //スプレッドシートに書いてある曜日を使って順番に日曜日から土曜日まで検索していく
          var day = sheet.getRange(1, i).getValue();
        //ラインメッセージが曜日を含んでいた時
          if(message.includes(day)){
            for(let j=2; j<=26; j += 4) {
          //1限から7限まで順番に検索
              var classNumRow = j;
          //時限(1限とか)の数字を取得
              var classNum = sheet.getRange(j, 1).getValue();
          //メッセージがその時限の数字を含んでいて、その曜日・時限の授業名がある場合
              if(message.includes(classNum) && sheet.getRange(classNumRow, dateColumn).getValue()){
           // function getClassInfo を起動
                var classInfos = getClassInfo(classNumRow, dateColumn);
           //ラインに返信するメッセージを設定
                var returnMessage = classInfos.classDay + "曜" + classInfos.classNum + "限 (" + classInfos.startTime + "-" + classInfos.endTime + 
                  ")\n授業名:" + classInfos.className + 
                    "\nZoomID: " + classInfos.zoomID + 
                      "\nPass: " + classInfos.zoomPass;
                reply(reply_token, returnMessage);
            //指定した曜日の時限に授業がない場合
              } else if(message.includes(classNum) && !sheet.getRange(classNumRow, dateColumn).getValue()) {
                var returnMessage = "授業はありません。"
    
                reply(reply_token, returnMessage);
              }
            }
          }
        }
      }
    }
    

    간략하게 설명하면 for 문을 사용하여 스프레드 시트의 셀에있는 요일을 가져 와서 해당 요일이 메시지에 포함되어 있는지 확인합니다. 시간 제한의 숫자를 얻고 메시지에 포함되어 있는지 확인하는 느낌입니다.
    for문의 숫자와 취득하는 셀의 위치를 ​​비교해, 어떻게 움직이고 있는지 이해해 보세요.

    연상 배열에 대하여


    function getClassInfo 에서 취득한 수업의 정보를 function doPods(e) 로 사용하고 싶습니다만, 그 때문에, 사용하고 싶은 정보를 하나로 정리해, return 로 보내고 있습니다.
    정보를 하나로 정리하기 위해 연상 배열을 사용하고 있으며 classInfos.className 와 같이 変数名.key名 로 호출할 수 있습니다.

    여기까지 할 수 있으면 갱신해, 수업의 검색을 할 수 있는지 시험해 봅시다.

    다음글↓
    3. 문계에서도 알 수 있는, GAS에 의한 수업 통지의 LINE bot의 작성 그 ③

    좋은 웹페이지 즐겨찾기