私たちの搭乗スクールは、到着と出発時に生徒がGoogleフォームを使用してサインインとサインアウトします。 私は、毎晩、生徒がその夕方に搭乗しているレコードを作成する関数 - dailyRecord() - を持っています。 2つのカスタムメニューがあります.1つはフォーム応答を半分の期間、exeats(週末)でパージし、もう1つは搭乗日の記録を空けて各期末に使用します。フォーム送信の最初のインスタンスでのみトリガースクリプト
フォームレスポンスをパージすると、dailyRecord()関数も無効になります(とにかく、学校に生徒がいない場合はレコードを作成したくありません)。 次回フォーム応答が提出されたとき(つまり、週末/半期後に再度サインインを開始するとき)、dailyRecord()関数を再度有効にするスクリプトを作成しようとしました。問題はフォームが提出されるたびに実行されていることです。つまり、1つではなく複数のレコードが毎晩作成されています。私は、ブレーク後の最初のフォーム提出時に機能を再有効化する必要があります。 任意のアイデア誰
//ONOPEN - Menu allowing user to choose to delete previous form submissions//
function onOpen() {
var ui = SpreadsheetApp.getUi();
// Or DocumentApp or FormApp.
ui.createMenu('Clear Data')
.addItem('Exeat & HT - Purge Form reponses', 'responsesAlert')
.addItem('End of Term - Empty History Sheets', 'historyAlert')
.addToUi();
}
//DELETETRIGGER - Stand alone function to delete 'dailyRecord' Trigger (stop recording nightly register)//
function deleteTrigger() {
var triggers = ScriptApp.getProjectTriggers();
for (var i = 0; i < triggers.length; i++) {
if (triggers[i].getHandlerFunction() === 'dailyRecord') {
ScriptApp.deleteTrigger(triggers[i]);
}
}}
//RESPONSESALERT - Alert box deleting previous form submissions 'YES', doing nothing if not//
function responsesAlert() {
var ui = SpreadsheetApp.getUi();
var result = ui.alert(
'This will remove previous form responses - The nightly record (History Sheet) will remain intact',
'Are you sure you want to continue?',
ui.ButtonSet.YES_NO);
// Process the user's response.
if (result == ui.Button.YES) {
//Empty 'Form Responses 1' Sheet of data
var ui = SpreadsheetApp.getUi();
var source = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Form Responses 1");
var lastRow = source.getLastRow()
source.deleteRows(2, lastRow)}
//Empty the Google Form of all Responses
var form, urlForm = SpreadsheetApp.getActiveSpreadsheet().getFormUrl();
if (urlForm) {}
form = FormApp.openByUrl(urlForm);
if (form) form.deleteAllResponses();
//Delete 'dailyRecord' Trigger (stop recording nightly register)
var triggers = ScriptApp.getProjectTriggers();
for (var i = 0; i < triggers.length; i++) {
if (triggers[i].getHandlerFunction() === 'dailyRecord') {
ScriptApp.deleteTrigger(triggers[i]);
}
}}
//HISTORYALERT - Alert box deleting previous form submissions 'YES', doing nothing if not//
function historyAlert() {
var ui = SpreadsheetApp.getUi();
var result = ui.alert(
'This will clear all daily records from the History Sheet',
'Are you sure you want to continue?',
ui.ButtonSet.YES_NO);
// Process the user's response.
if (result == ui.Button.YES) {
//Empty 'History' Sheet of data
var ui = SpreadsheetApp.getUi();
var source = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("History");
var lastColumn = source.getLastColumn()
source.deleteColumns(4, lastColumn-3)}
}
//DAILYTRIGGER - Trigger running record-keeping function c.10pm each night//
function dailyTrigger() {
ScriptApp.newTrigger('dailyRecord')
.timeBased()
.atHour(22)
.everyDays(1)
.create();
}
//DAILYRECORD - Record-keeping function, copy/value-pasting record into next clear column//
function dailyRecord() {
var ss = SpreadsheetApp.getActive()
.getSheetByName('History'),
lastColumn = ss.getLastColumn(),
colC = ss.getRange("C:C")
.getValues();
ss.getRange(1, lastColumn + 1, colC.length, 1)
.setValues(colC);
}
HTML/JavaScript/CSSスニペットは、このサイトで直接実行できるコードでのみ使用する必要があるため、削除しました。一方、これは私に[XY問題](http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem)のように見えます。フォームからすべての応答を削除しないようにすると、dailyRecord関数は必要ありません。 –
Rubénさん、これはかなり新しく、XY問題でかなり曇っています。私が達成しようとしていることと、達成しようとしていることを単に共有しようとしました。あなたは正解ですが、フォームの返信を削除しないと、すべての生徒がサインイン/サインアウトしても、スプレッドシートが扱いにくくなることが懸念される日までに役立ちます。レスポンスありがとう! – user3194744