Наша школа-интернат использует форму Google для учеников для входа и выхода по прибытии и отъезде. У меня есть функция - dailyRecord() - это делает запись каждую ночь, когда ученики посещают этот вечер. Существует два пользовательских меню, один из которых позволяет очистить ответы формы на половину срока и exeats (выходные дни), а другой, который также опорожняет запись интернатов для использования в конце каждого срока.Триггерный скрипт только на первом экземпляре формы Представление
В настоящее время очистка ответов на формы также отключает функцию dailyRecord() (мы не хотим делать запись, если в школе нет учеников). Я попытался создать сценарий, который снова активирует функцию dailyRecord(), когда следующий раз отправляется ответ формы (т. Е. Ученики начинают подписываться снова после выходных/половины). Проблема в том, что он запускает КАЖДОЕ время отправки формы, что означает, что каждую запись записывают несколько записей вместо одной. Мне нужна только функция, которая будет включена снова в первой форме после разрыва. Любых идей кто-либо
//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. –
Спасибо, Рубен, довольно новичок в этом и довольно туманный по проблеме XY, просто пытаясь поделиться тем, чего я пытаюсь достичь, и тем, как я пытался его достичь. Вы правы, что не удаление ответов на формы поможет, однако, всем ученикам, которые подписываются и выходят в течение всего дня, что меня беспокоит, что таблица начнет становиться слишком громоздкой. Спасибо за ответ! – user3194744