チャンネル登録者数100人突破!AppSheet 電話受領アプリの改善・決定版!
したんです。実は!!
ありがとうございます!!🙇♂️
最近はAppSheet に関する動画もアップし始めました!
次の動画から、電話受領アプリの改変版を解説・公開したいと思います!
下記の記事の改良版になります!
アプリの概要はこんな感じ
事務室で電話受領
電話を受けた方が AppSheet に必要事項を入力
取次相手の先生と電話を受けた自分へ自動でメールを送る
誰が、どんな電話を受けたのかを一覧にして表示する
当日の情報は別シートに転記され、翌日は情報がクリアされ、一覧は常に当日の情報を載せる
こんな感じです。
改善前だと、取次相手の先生へメールを送るとき、アプリを公開している状態じゃないとできなかったんです。
それをクローズの状態でも使えるように、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になって、学校ごとの現状に合わせてカスタムしていただければと思います‼️