为了账号安全,请及时绑定邮箱和手机立即绑定

如何在谷歌表单或谷歌表格上使用 GAS 限制基于两个 ID 的谷歌表单提交

如何在谷歌表单或谷歌表格上使用 GAS 限制基于两个 ID 的谷歌表单提交

狐的传说 2022-07-08 18:17:49
我正在处理一个查询谷歌表单,它收集参与者对某个问题的投票。我想根据 ID 号限制参与者。我在考虑三种方法:如果输入的 ID 不在给定列表中,则阻止提交表单。(我更喜欢这种方法,但到目前为止找不到任何有用的代码)使用Google 表单上的 GAS通过 onFormSubmit 触发器提交表单后,删除链接响应电子表格中的行。这是我的代码不起作用:function onFormSubmit(e) { // Grab the session data again so that we can match it to the user's choices.var response = [];var values = SpreadsheetApp.openById('1rT9tKAi6ZSvZzBaXNSPMJAt4RKnW-  9lqiE9zvZV').getDataRange().getValues();for (var i = 1; i < values.length; i++) {  var indiv = values[I];  var Fname = indiv[0];  var Lname = indiv[1];  var ID1 = indiv[2];  var ID2 = indiv[3];  // For every selection in the response, find the matching ID1 and title  // in the spreadsheet and add the session data to the response array.  if (e.namedValues[ID1] == ID1) {    response.push(indiv);  } else {  Browser.msgBox('Your ID number does not matches the list');  }}使用Google 表格上的 GAS通过 onChange 触发器提交表单后,删除链接响应电子表格中的行。这是我的最大努力:function onChange(e) {   var refvalues =  SpreadsheetApp.getActive().getSheetByName('members_sheet').getDataRange().getValues(); var  sheet = SpreadsheetApp.getActive().getSheetByName('Form Responses 1'); var  values = sheet.getDataRange().getValues(); var indiv = values[values.length]; var ID1 = indiv[2]; var flag = 0;  for (var i = 1; i < refvalues.length; i++) {      var refindiv = refvalues[i];      var refID1 = refindiv[2];    if (ID1 == refID1) {      flag = 1;    } }  if (flag == 0) {   sheet.deleteRow(values.length);  } };我是 Javascript 编码的新手,所以任何帮助都将不胜感激。
查看完整描述

2 回答

?
Helenr

TA贡献1780条经验 获得超4个赞

如果输入的 ID 不在给定列表中,则阻止提交表单

  • 最简单的方法是合并文本验证,您甚至不需要为它编写代码

  • 只是在构建/编辑ID1问题时选择Regular expressionmatches并指定所有允许提交表单的 ID|用作分隔符

//img1.sycdn.imooc.com//62c8047200017df107810320.jpg

更多信息

  • 如果您有动力以编程方式合并文本验证,请查看 此处 和此处

  • 如果您更喜欢使用现有代码来删除行 - 将脚本附加到表单或电子表格都没有关系,在这两种情况下您都可以并且应该使用触发器 onFormSubmit(不是onChange!)

  • 从表单提交表中删除行将不起作用 - 它们会在下一次表单提交时返回

  • 将具有正确 ID 的行复制onFormSubmit到辅助工作表可以工作,但它比使用文本验证更复杂


查看完整回答
反对 回复 2022-07-08
?
饮歌长啸

TA贡献1951条经验 获得超3个赞

如果您希望将所有 id 保留在电子表格中,请在代码的开头尝试此操作。


function onFormSubmit(e) {

  const ss=SpreadsheetApp.openById('your id');

  const idsh=ss.getSheetByName('id sheet');

  const idrg=ss.getRange(2,1,idsh.getLastRow()-1,1);

  const idA=idrg.getValues().map(function(r){return r[0];});

  if (idA.indexOf(e.namedValues['ID1'])==-1) {

    Browser.msgBox('Your ID number does not match the list');

    return;

  }

  //rest of your code here


}


查看完整回答
反对 回复 2022-07-08
  • 2 回答
  • 0 关注
  • 196 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号