承認が切れないようにする方法が分からなかったため、現時点で行っている「承認が切れた際に分かるようにするための方法」を記載しておきます。
(無駄なスクリプトもあるかと思います。ご容赦ください)
方法:
トリガー実行日を任意の判定用セルに記録。
スプレッドシート起動時にその記録とスプレッドシート起動日を比較し、トリガー実行日<スプレッドシート起動日の場合はトリガーを再設定するようエラーメッセージを表示する
スクリプト
GAS
1//■シートの表示リフレッシュ用関数
2function flush(){
3 SpreadsheetApp.flush(); // シートの再描画,これだけで書き込み遅延を解消できるはずなのだが,できない
4 SpreadsheetApp.flush(); // シートの再描画,なぜか二回続けると書き込み遅延を解消できるようだ
5}
6
7//■日付を0時0分0秒で設定し直して比較できるようにgetTimeする関数
8function getYMD(date){
9 date.setHours(00);
10 date.setMinutes(00);
11 date.setSeconds(00);
12 date.setUTCMilliseconds(00);
13 date = date.getTime();
14 return date;
15}
16
17//■トリガーが起動していない場合の判定用関数
18function onOpen(){
19 var ss = SpreadsheetApp.getActive();
20
21 //スプレッドシート起動日の0時0分0秒を取得
22 var date = new Date();
23 var start = getYMD(date);
24
25 //Example実行日の0時0分0秒を取得
26 var sh2 = ss.getSheetByName("シート2");//判定用に作成した任意のシートの名前
27 var sh2openss = sh2.getRange("G2");//判定に使用する任意のセル
28 var sh2openssJudge = sh2openss.getValue();
29 sh2openssJudge = new Date(sh2openssJudge);
30 sh2openssJudge = getYMD(sh2openssJudge);
31
32 //今現在の日付とトリガーExampleの日付を比較
33 if(sh2openssJudge==start){
34 console.log("トリガー設定済");
35 return;
36 }
37
38 //実行をstaySecond秒ディレイ
39 var staySecond = 15;
40 Utilities.sleep(staySecond * 1000);
41
42 flush();//画面再読込
43
44 //Example実行日再取得、再判定
45 sh2openssJudge = sh2openss.getValue();
46 sh2openssJudge = new Date(sh2openssJudge);
47 sh2openssJudge = getYMD(sh2openssJudge);
48 if(sh2openssJudge<start){
49 console.warn("要トリガー再設定");
50 var ui = SpreadsheetApp.getUi()
51 var menu = ui.createMenu("動作確認");
52 menu.addItem("全トリガー再設定",'fnmenu');//
53 menu.addToUi();
54
55 Browser.msgBox('【エラー】\n\nトリガーが正常に動作していません。\nメニューバーの「動作確認」から「全トリガー再設定」を実行してください。');
56 }
57}
58
59function Example(動作確認を行いたいメインの関数名)() {//スプレッドシート起動時に実行
60 var date = new Date();
61 var ss = SpreadsheetApp.getActive();
62 var sh2 = ss.getSheetByName("シート2");//判定用に作成した任意のシートの名前
63 var sh2openss = sh2.getRange("G2");//判定に使用する任意のセル
64sh2openss.setValue(date);//トリガー実行時の日時を判定用セルにセット
65
66 /*
67 関数内の処理内容記述
68 */
69}
70
71 /*
72 必要な数だけ関数記述して必要に応じてresetAllTriggers内でトリガー設定
73 */
74
75//■全トリガーの削除・再設定関数
76function resetAllTriggers(){
77 var ss = SpreadsheetApp.getActive();
78
79 //元々セットされていたトリガーが残っていれば検出して削除
80 var triggers = ScriptApp.getProjectTriggers();
81 for(var i=0; i < triggers.length; i++) {
82 if (triggers[i].getHandlerFunction() == 'Example(動作確認を行いたいメインの関数名)'||/*セットしていたトリガーの個数分判定*/) {
83 ScriptApp.deleteTrigger(triggers[i]);
84 }
85 }
86
87 // newTriggerメソッドでトリガーを再設定
88 ScriptApp.newTrigger('Example(動作確認を行いたいメインの関数名)')
89 .forSpreadsheet(ss)
90 .onOpen() // スプレッドシート起動時のトリガー
91 .create();
92
93 /*
94 必要なトリガーの数だけ同様に設定
95 */
96
97 return "<p>トリガーチェック完了</p> 全トリガー再設定済";
98}
99
100//■ウェブアプリとして実行するためのdoGet
101//https://zenn.dev/datsukan/articles/f525e0f7af6859
102//⇒スクリプトからトリガー記述していたが動かなくなる時があったため、上記リンク先に従いトリガー作成スクリプトをウェブアプリとしてデプロイして実行することにした
103//https://qiita.com/yuma-ito-bd/items/df8b1c5ebca3d976fc8f
104//⇒そのままデプロイしてもHeadバージョンが指定されなかったため、上記リンク先の手順を参考に旧エディタ>公開>マニフェストから配置>Version 0クリックするとHeadバージョンのURLが表示される
105function doGet(e) {
106 var html = HtmlService.createTemplateFromFile('Index');
107 return html.evaluate();
108}
109
110//■メニューバーからのトリガー再設定用関数
111//Webアプリとしてデプロイした本アプリへのリンクをgetUi().showModelessDialogメソッドで表示(Browser.msgBox();ではリンクではなく文字列になってしまうため)
112function fnmenu(){
113 var htmlOutput = HtmlService
114 .createHtmlOutput('<p>トリガー再設定リンク:<a href=" WebアプリとしてデプロイしたURLを記述" target="blank">再設定はこちら</a></p>')
115 .setSandboxMode(HtmlService.SandboxMode.IFRAME)
116 .setWidth(400)
117 .setHeight(300);
118 SpreadsheetApp.getUi().showModelessDialog(htmlOutput, '【 トリガー再設定 】');
119}
120
HTML
1<!DOCTYPE html>
2<html>
3 <head>
4 <base target="_top">
5 </head>
6 <body>
7 test
8 <?!= resetAllTriggers(); ?>
9
10 <p>このタブを閉じてください。</p>
11 </body>
12</html>
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。