たびたびお世話になります。
シートを開いた時にgetSelectedButtonを表示することで、
簡易的なパスワード制限&入場記録をとる仕組みを考えていますが、
OKボタンを押した時の挙動が安定しないため、
コードにおかしい所がないかご意見をいただけませんでしょうか。
###想定する動作
1)シートを開いたとき入力ボックスを表示
. 2-a)OKボタン押下時、入力されたテキストと一致するパスワードがあるかpassSh検索
. 3-a)一致する場合、entShに時刻と入力テキスト(使用されたパスワード)を記録
. 4)「ご入力ありがとうございます」表示後、スクリプトを終了
. 3-b)一致しない(あるいは空白でOK押した)場合、
. 「パスワードが一致しません」表示後、promptmsgを再実行
. 2-bc)×ボタン、キャンセルを押したときはpromptmsgを再実行
###困っている所・改善できたら嬉しい所
空白のままOKを押した時の挙動がおかしい
・4)の挙動へ入ってしまう(alertが実行される)
・alertをOKで消すと、そのままpromptmsgが終了してしまう
(空白をパスワード不一致とみなしていない?)
×やキャンセル等でpromptmsgループを経由したあとだと、
正しいパスワードを入力してもpromptmsgループ、空白でOKでもpromptmsgループ……となる。
何度かOKを押していると終了する。
(promptmsg();の挙動がスタックしてる?)
動作4ののち、指定のシートを表示させることはできるでしょうか?
(こちらは自己解決しました)
また、これはどうにもならない仕様かな……とは思っていますが、
起動時トリガーが3~5秒かかり非常に遅いので
もしGASの実行を早める方法があればご教授ください……(:3」∠)
###現在のコード
GAS
1function promptmsg(){ 2 var MasterSS = SpreadsheetApp.openById('***************');//SSID 3 var passSh = MasterSS.getSheetByName('pass') //パスワード格納シート 4 var entSh = MasterSS.getSheetByName('Log') //Logシート 5 var values = passSh.getRange("C8:C400"); //passシートのC8:C378(パスワードのリスト)の値を取得 6 var today = Utilities.formatDate(new Date(), "JST", "yyyy/MM/dd HH:mm"); //dateのフォーマット指定 7 8 var ui = SpreadsheetApp.getUi(); 9 var ret = ui.prompt("パスワードを入力してください",ui.ButtonSet.OK_CANCEL); 10 11 switch(ret.getSelectedButton()){ //押されたボタンによって処理を分岐 12 13 case ui.Button.OK: //OKボタンを押した時の処理 14 var input = ret.getResponseText(); //入力した文字をinputに格納 15 var result = Array.prototype.concat.apply([],values.getValues()).indexOf(input); 16 17 if (result >= 0) { 18 entSh.appendRow([today,input]); //entShシートに入場記録 19 SpreadsheetApp.getUi().alert("ご入力ありがとうございます"); 20 break; 21 22 } else { 23 SpreadsheetApp.getUi().alert("パスワードが一致しません"); 24 promptmsg(); 25 } 26 break; 27 28 case ui.Button.CANCEL: //キャンセルを押した時の処理 29 promptmsg(); 30 case ui.Button.CLOSE: //ダイアログの×を押した時の処理 31 promptmsg(); 32 } 33} 34
###追記の補足
パスワードは複数個(100個以上)あり、その中の
どのパスを使ってログインしたのかを記録するのが本スクリプトの目的になります。
(閲覧者がGoogleアカウントを持っていない場合でも、誰がログインしたのかを記録したい)
いろんな参考を引っ張ってきたキメラコードなので、不要な部分等あるかもしれません……。
ご意見よろしくお願いします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/12/17 07:42
2019/12/17 07:45
2019/12/17 07:52