見出し画像

チャンネル登録者数100人突破!AppSheet 電話受領アプリの改善・決定版!

したんです。実は!!

ありがとうございます!!🙇‍♂️

最近はAppSheet に関する動画もアップし始めました!

次の動画から、電話受領アプリの改変版を解説・公開したいと思います!

下記の記事の改良版になります!

アプリの概要はこんな感じ

  1. 事務室で電話受領

  2. 電話を受けた方が AppSheet に必要事項を入力

  3. 取次相手の先生と電話を受けた自分へ自動でメールを送る

  4. 誰が、どんな電話を受けたのかを一覧にして表示する

  5. 当日の情報は別シートに転記され、翌日は情報がクリアされ、一覧は常に当日の情報を載せる

こんな感じです。

改善前だと、取次相手の先生へメールを送るとき、アプリを公開している状態じゃないとできなかったんです。
それをクローズの状態でも使えるように、GASを組み込んで動かします!

これにより、事務室が10人以下の学校さんなら、無料で安心して運用可能かな!?

今回使ったGASは、3つ。

自動メールを実行してくれるプログラム

function onOpen() {
  var ssI = SpreadsheetApp.openById(''); //職員
  var ssInfo = ssI.getSheetByName('受領');
  var ssT = SpreadsheetApp.openById(''); //職員
  var ssTeacher = ssT.getSheetByName('職員');
  var ssS = SpreadsheetApp.openById(''); //受付担当事務
  var ssStaff = ssS.getSheetByName('担当者');
  const lastRowInfo = ssInfo.getLastRow();
  const lastColumnInfo = ssInfo.getLastColumn(); //最終列を取得
  const lastRowTeacher = ssTeacher.getLastRow();
  const lastRowStaff = ssStaff.getLastRow();/
  var teacherID =[];
  teacherID = ssTeacher.getRange(2, 1,lastRowTeacher).getValues();
  teacherID = Array.prototype.concat.apply([], teacherID);
  var staffID = [];
  staffID = ssStaff.getRange(2, 1,lastRowStaff).getValues();
  staffID = Array.prototype.concat.apply([], staffID);
  var flag = [];
  flag = ssInfo.getRange(2,6,lastRowInfo).getValues();
  flag = Array.prototype.concat.apply([], flag);
  var row = flag.indexOf(true);
  var infoID = [];
  infoID = ssInfo.getRange(row+2,1,1,lastColumnInfo).getValues();
    var data = infoID[0];
    var indexStaff = staffID.indexOf(data[1]);
    var staffName = ssStaff.getRange(indexStaff+2,6).getValue();
    var staffAdress = String(ssStaff.getRange(indexStaff+2,7).getValue());
    var indexTeacher = teacherID.indexOf(data[2]);
    var teacherName = ssTeacher.getRange(indexTeacher+2,6).getValue();
    var teacherAdress = String(ssTeacher.getRange(indexTeacher+2,7).getValue());
    var time = data[3];
    var name = data[7];
    var text = data[8];
    var cate = data[9];
    var tell = data[10];
    var adress = String(data[11]);
  mail(staffName,staffAdress,teacherName,teacherAdress,time,name,text,cate,tell,adress);
}

function mail(staffName,staffAdress,teacherName,teacherAdress,time,name,text,cate,tell,adress){
  let To = teacherAdress;
  let Options = {
  'cc':staffAdress
  //'bcc':''
  };
  let Subject = cate;//こちらはメールの件名
  // 自動返信メール本文
  let Body =
  teacherName+'先生\n\n'+name+'さんから'+cate+'依頼です。\n\n'
  +text+'\n\n電話は'+tell+'\nメールは'+adress+'\n\n'+staffName+'より\n';
  GmailApp.sendEmail(To, Subject, Body, Options);
}

入力されたデータをチェックして、一覧に転載するプログラム

function copyRows() {
  // 対象のスプレッドシートを指定
  var ss = SpreadsheetApp.openById('');//コピー元のスプレッドシートID
  var sht1 = ss.getSheetByName('受領');//コピー元のシート名
  let sht2 = ss.getSheetByName('一覧');//コピー先のシート名
  const lastRow1 = sht1.getLastRow();//sht1の最終行を取得
  const lastRow2 = sht2.getLastRow();//sht2の最終行を取得
  const lastColumn1 = sht1.getLastColumn(); //sht1の最終列を取得
  var flag = [];//配列の変数を用意
  flag = sht1.getRange(2,6,lastRow1).getValues();//フラグが入っている列を配列として取得
  flag = Array.prototype.concat.apply([], flag);//2次配列を1次配列に変換
  var row = flag.indexOf(true);//trueとなっている番号を取得
  var data = sht1.getRange(row+2,1,1,lastColumn1).getValues();//コピー元のスプレッドシート全ての値を配列に格納、この時row+2にする(理由①配列は0から始まっている、理由②1行目はカラム名が入っている
  data = Array.prototype.concat.apply([], data);//2次配列を1次配列に変換する
  var id = [];//配列の変数を用意
  id = sht2.getRange(2, 1,lastRow2).getValues();//既に転載されているIDを配列として取得する
  id = Array.prototype.concat.apply([], id); //2次配列を1次配列に変換する
  var keyword = data[0];//転載されているかどうかを判断するためのIDは0列(A列)に含まれている
  if(id.indexOf(keyword)==-1){//IDを検索して、もしも一致するものがなければ
  sht2.appendRow(data);//配列全体を最終行の下に挿入する
      } 
  }

↑の参考にしたサイト

1日の終わりに、データを削除するプログラム

これを日付ベースのトリガーで毎日午後11時から午後12時くらいに設定しておく。

function clear() {
  var ss = SpreadsheetApp.openById('');//コピー元のスプレッドシートID
  var sht1 = ss.getSheetByName('受領');//コピー元のシート名
  const lastRow = sht1.getLastRow();
  sht1.getRange(2, 1, lastRow - 1).clearContent();
}

サンプルアプリはこちら

GASの組み込み方が新しく必要になりますが、YouTubeで解説していきますので、ご興味ある方はチャンネル登録をしておいてください!!
または個別でお問い合わせください!😎

YouTube チャンネル

また、こちらのYouTubeで予習をしておくと良いかもしれません!!


動画一覧

ポートフォリオ

AppSheet 関係のTweet


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