我正在使用当前的" new" Google表单的版本。我有一个表单,表单A ,以及相关的脚本脚本A 。该脚本包含一个与表单A的表单提交触发器相关联的函数onFormSubmit。该函数接收一个参数,一个事件,其中包含Form和提交的FormResponse字段" source"和#34;回应"分别
在此功能的正文中,如何阻止事件/拒绝表单提交?
或者,如果无法做到这一点,我如何能够安静地阻止存储FormResponse,或者从响应列表中悄悄地将其删除?
我看到有一个Form.deleteAllResponses方法。我是否必须删除所有回复,然后再次添加所有回复,除了当前回复?或者有更好的方法吗?
答案 0 :(得分:1)
尝试尝试使用事件触发器并使用:
<强> setAcceptingResponses(enabled)
强>
设置表单当前是否接受响应。新表单的默认值为true。
以下是来自相关SO post的代码示例:
function onFormSubmit(){
var af = FormApp.getActiveForm();
var defaultClosedFor = af.getCustomClosedFormMessage();
af.setCustomClosedFormMessage("The form is currently processing a submission, please refresh the page.");
af.setAcceptingResponses(false);
<put your script stuff here>
af.setAcceptingResponses(true);
af.setCustomClosedFormMessage(defaultClosedFor);
}
希望这有帮助。
答案 1 :(得分:1)
我处理此问题的方法是将第二个表格(同一Google表格中的标签)复制到表单中。 onFormSubmit()函数中发生的第一件事是将响应表中的最新行复制到重复表中。您可以实现一个选择语句,该语句根据您的条件选择是否进行复制。
这意味着始终存在来自表单的原始回复的副本(对于审核目的很重要),但是如果提交者犯了错误,还可以使用一种方法来更正/修改回复。
如果有用,这是我执行复制的功能(请注意,我的设置对象已在其他地方抽象化,但希望有足够的空间来弄清楚正在发生的事情)。
/**
* Copies form submissions from the responses sheet to another sheet.
*
* @param {event object} e the event object received from a form submit trigger
* @param {Settings} settings an object containing the settings this function expects to use
* @return {integer} the position of the new row in the destination sheet
*/
function copyFormSubmissionToSheet(e, settings) {
var sourceSheet = SpreadsheetApp.getActive().getSheetByName(settings.nameOfFormResponsesSheet);
var destinationSheet = SpreadsheetApp.getActive().getSheetByName(settings.name OfApprovalsSheet);
var newRow = e.range["rowStart"];
var columnCount = sourceSheet.getLastColumn();
var newResponseRange = sourceSheet.getRange(newRow, 1, 1, columnCount);
var newResponseDestinationRange = destinationSheet.getRange(destinationSheet.getLastRow()+1, 1, 1, columnCount);
newResponseRange.copyTo(newResponseDestinationRange);
var newDataSheetRow = destinationSheet.getLastRow();
return newDataSheetRow;
}