拒绝Google表单提交或删除回复

时间:2017-04-15 02:36:48

标签: forms google-app-engine google-apps-script google-apps google-form

我正在使用当前的" new" Google表单的版本。我有一个表单,表单A ,以及相关的脚本脚本A 。该脚本包含一个与表单A的表单提交触发器相关联的函数onFormSubmit。该函数接收一个参数,一个事件,其中包含Form和提交的FormResponse字段" source"和#34;回应"分别

在此功能的正文中,如何阻止事件/拒绝表单提交?

或者,如果无法做到这一点,我如何能够安静地阻止存储FormResponse,或者从响应列表中悄悄地将其删除?

我看到有一个Form.deleteAllResponses方法。我是否必须删除所有回复,然后再次添加所有回复,除了当前回复?或者有更好的方法吗?

2 个答案:

答案 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;
}