【问题标题】:How to use Google Sheets onEdit() trigger to run function to update Google Form如何使用 Google 表格 onEdit() 触发器运行更新 Google 表单的功能
【发布时间】:2016-07-01 08:46:26
【问题描述】:

我有一个 Google 表格工作簿,其中有一个工作表,我想用它来保存工作簿和 Google 表单的设置。

我制作了一个自定义的onEdit() 函数,它触发了两个函数 - 一个用于更新工作簿,一个用于更新表单:

function onEdit(e){
  var range = e.range;
  if (range.getSheet().getName() == "Settings") {
    setMonthByMonth(); // Updates the workbook
    updateExpenseForm(); // Should update the form
  }
}

工作簿功能工作正常。表单功能没有。该函数如下所示:

function updateExpenseForm() {
  var categoryId = "1098744733",
      currencyId = "595880786",
      responsibleId = "2043429480",
      formId = "1arB3yibHa_Y69fc_GxE8mU1FzNR3PYgsivYbrQ0LsQk";

  var form = FormApp.openById(formId);
  var ss = SpreadsheetApp.getActive();
  var settingsSheet = ss.getSheetByName("Settings");

  var categoryList = form.getItemById(categoryId).asListItem();
  var responsibleList = form.getItemById(responsibleId).asListItem();
  var currencyList = form.getItemById(currencyId).asListItem();

  var categoryValues = settingsSheet.getRange("A5:A").getValues();
  var categoryNames = [];

  var responsibleValues = settingsSheet.getRange("F5:F").getValues();
  var responsibleNames = [];

  var currencyValues = settingsSheet.getRange("K5:K").getValues();
  var currencyNames = [];

  for(var i = 0; i < categoryValues.length; i++) {
    if(categoryValues[i][0] != "") {
      categoryNames[i] = categoryValues[i][0];
    }
  }

  for(var i = 0; i < responsibleValues.length; i++) {
    if(responsibleValues[i][0] != "") {
      responsibleNames[i] = responsibleValues[i][0];
    }
  }

  for(var i = 0; i < currencyValues.length; i++) {
    if(currencyValues[i][0] != "") {
      currencyNames[i] = currencyValues[i][0];
    }
  }

  categoryList.setChoiceValues(categoryNames);
  responsibleList.setChoiceValues(responsibleNames);
  currencyList.setChoiceValues(currencyNames);
}

我可以从脚本编辑器手动运行它而不会出现任何问题。但是当通过onEdit() 函数触发时它不会运行。如果我将表单函数移到工作簿函数上方,也不会调用工作簿函数。

我错过了什么吗?

【问题讨论】:

标签: google-apps-script google-sheets google-forms


【解决方案1】:

您很可能正在使用简单的触发器。他们无法访问需要授权的服务,例如表单服务。解决方案是改用installable trigger

来自https://developers.google.com/apps-script/guides/triggers/#restrictions

限制

因为简单的触发器会自动触发,无需询问用户 对于授权,它们受到一些限制:

...

  • 他们无法访问需要授权的服务。例如,一个 简单触发器无法发送电子邮件,因为 Gmail 服务需要 授权,但一个简单的触发器可以翻译一个短语 语言服务,是匿名的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多