GoogleClock()関数に基づいて計算されたシートに含まれる時間に基づいて、プログラムで3つのトリガーを削除してからリセットし、毎日次の就業日に自動インクリメントする関数(以下を参照)があります(WORKDAY( ))関数とすべての休日を含む範囲。設定する3つのトリガーの1つは、次の就業日の終わりに自分自身を再度実行するトリガーであり、プロセスが再開されます。
これは約60%の時間で機能しており、残りの時間は失敗しています。私が見た限りでは、エラーの電子メールメッセージは生成されていません。
機能は以下の通りです。whileループは、スクリプトの実行時にスプレッドシートの値がGoogleClock()の再計算の最中にないことを確認することを目的としています。これは、スクリプトが失敗した理由についての私の最初の疑いでした。助言がありますか?
function setCustomRunTriggers() {
Utilities.sleep(5000);
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("PushedSchoolHolidays");
var nextMidnight = sheet.getRange('D3').getValue();
var nextSeven = sheet.getRange('D4').getValue();
var nextSevenOFive = sheet.getRange('D5').getValue();
var type = getType(nextMidnight);
while (type!="Object") {
nextMidnight = sheet.getRange('D3').getValue();
nextSeven = sheet.getRange('D4').getValue();
nextSevenOFive = sheet.getRange('D5').getValue();
type = getType(nextMidnight);
}
var triggers = ScriptApp.getScriptTriggers();
for (var i = 0; i<triggers.length; i++) {
var eventType = triggers[i].getEventType();
var triggerSource = triggers[i].getTriggerSource();
var handlerFunction = triggers[i].getHandlerFunction();
if ((handlerFunction=='functionA')&&(eventType=="CLOCK")&&(triggerSource=="CLOCK")) {
ScriptApp.deleteTrigger(triggers[i]);
}
if ((handlerFunction=='functionB')&&(eventType=="CLOCK")&&(triggerSource=="CLOCK")) {
ScriptApp.deleteTrigger(triggers[i]);
}
if ((handlerFunction=='setCustomRunTriggers')&&(eventType=="CLOCK")&&(triggerSource=="CLOCK")) {
ScriptApp.deleteTrigger(triggers[i]);
}
}
ScriptApp.newTrigger('functionA').timeBased().at(nextMidnight).create();
ScriptApp.newTrigger('functionB').timeBased().at(nextSeven).create();
ScriptApp.newTrigger('setCustomRunTriggers').timeBased().at(nextSevenOFive).create();
}