簡體   English   中英

如何使用 Google Sheets onEdit() 觸發器運行函數來更新 Google 表單

[英]How to use Google Sheets onEdit() trigger to run function to update Google Form

我有一個 Google Sheets 工作簿,其中有一個工作表,我想用它來保存工作簿和 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()函數觸發時它不會運行。 如果我將表單函數移到工作簿函數上方,工作簿函數也不會被調用。

我錯過了什么嗎?

您很可能正在使用一個簡單的觸發器。 他們無法訪問需要授權的服務,例如 Forms Service。 解決方案是改用可安裝的觸發器

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

限制

因為簡單觸發器會自動觸發,不需要用戶授權,所以它們受到以下幾個限制:

...

  • 他們無法訪問需要授權的服務。 例如,簡單觸發器無法發送電子郵件,因為 Gmail 服務需要授權,但簡單觸發器可以使用匿名的語言服務翻譯短語。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM