在提交表单时无法触发 Google 电子表格功能

Having trouble triggering a Google spreadsheet function on Form Submission

我创建了一个 Google 表格,该表格链接到包含两个 sheet 的 Google 传播sheet。我还在 Google 脚本中创建了一个函数,称为 "handleFormSubmission",当触发时(在提交链接表单时):

  1. 创建一个变量,其中包含来自 sheet 的此提交的值:var s0Row = s0.getRange("A"+(s0Last)+":J"+(s0Last)).getValues();

  2. 然后,如果在两个 sheet 上都满足匹配 ID 条件,则将 sheet 中的那些值设置到 sheet 二上的适当范围内: s1Row.setValues(s0Row);

可能有更好的方法来做到这一点,但目前当 运行 来自 Google 脚本并且表单将提交返回给 sheet 时,该功能可以正常工作。

我遇到的问题是在提交链接表单后触发此函数。我已尝试设置此触发器,如下面的屏幕截图所示。

代码

function handleFormSubmission() {
  var ss = SpreadsheetApp.openById("1FmArzo50IV2Wmykgsa89l_EARjzkiyeFDoPaCjGyBZM");
  SpreadsheetApp.setActiveSpreadsheet(ss);
  var sheet = SpreadsheetApp.getActive();
  var s0 = sheet.getSheets()[0];
  var s0Last = s0.getLastRow();
  var s1 = sheet.getSheets()[1];
  var s1Last = s1.getLastRow();
  var s0Bid = s0.getRange(s0Last, 10).getValue();
  var s0Row = s0.getRange("A"+(s0Last)+":J"+(s0Last)).getValues();
  for (var i = 2; i < s1Last + 1; i++) {
    var s1Bid = s1.getRange(i, 10).getValue();
    var s1First = s1.getRange(i, 2).getValue();
    var s1LastName = s1.getRange(i, 3).getValue();
    var s1Row = s1.getRange("A"+(i)+":J"+(i));
     if (s0Bid === s1Bid) {
      Logger.log(i + " " + s1First + s1LastName);
      Logger.log("s0: " + s0Bid);
      Logger.log("s1: " + s1Bid);
      Logger.log("Match!");
      s1Row.setValues(s0Row);
      Logger.log("----------------------");
      break;
    } else {
      Logger.log(i + " " + s1First + s1LastName);
      Logger.log("s0: " + s0Bid);
      Logger.log("s1: " + s1Bid);
      Logger.log("Nope...");
      Logger.log("----------------------");
    }
  };
};`

当前项目的触发器

我认为事件应该是 "From form" 而不是 "From spreadsheet"。那是因为您正在使用从电子表格打开的脚本编辑器。当您从表单打开脚本编辑器并在该编辑器中编写函数时,它会填充。希望对您有所帮助!

这绝对是您要截获的传播sheet 事件,尽管这看起来有悖常理。

我遇到了同样的问题并通过删除触发器、创建新版本的脚本然后重新创建触发器解决了这个问题。不知道它为什么有效 -- 也许 GAppsScript 专家可以向我们解释一下。

此外,为什么不从事件对象中获取表单提交值?因此,与其搜索 sheet[0] 的最后一行(在极端情况下,这可能不是您要查找的提交,而是下一个),您可以访问所需的字段从事件对象使用以下之一:

  • e.values(表单值的数组,按照它们在分布中出现的顺序排列sheet)
  • e.namedValues(一个dictionary/hash的表格值)