Google Sheet 服务帐户编辑 sheet 时未触发脚本?

Google Sheet Script not triggered when sheet is edited by service account?

所以我编写了一个 gs 函数,当有人在 sheet 中插入新行时,它会发送一封电子邮件。当用户手动插入数据时它工作正常,但是 sheet 也被通过 API 插入新行的服务帐户使用,并且在这种情况下不会触发编辑事件。

这是我正在使用的触发器

我以 sheet 的所有者身份创建了脚本和触发器,但这并没有解决任何问题,所以我没有想法。

使用代码触发用户事件的唯一方法是使用 Sheets API,并使用特殊设置将值设置为 USER_ENTERED 并且它仅适用于“On Change”事件。因此,您需要为“On Change”创建第二个触发器,但您可以使用相同的函数名称。尽管您可能需要修改函数以处理不同的事件对象。或者您可以使用不同的功能。

因此,您的服务帐户将需要 运行 使用 Sheets API 的代码来设置 Google Sheet 中的值。

您可以使用 REST API 或 Sheets 高级服务。

要使用 Advance Sheets 服务,代码如下所示:

function writeToSheet() {
  id = "Put the Sheet ID here";

  var rowValues = [
    ["one","two"],
  ];

  var request = {
    'valueInputOption': 'USER_ENTERED',
    'data': [
      {
        "range": "Sheet1!A2:B2",
        "majorDimension": "ROWS",
        "values": rowValues,
      },
    ],
  };

  var response = Sheets.Spreadsheets.Values.batchUpdate(request, id);
  Logger.log('response ' + JSON.stringify(response))
}

对于RESTAPI基本代码如下:

function writeToSheet() {
  var id,options,range,response,sh,ss,url,values;

  id = 'Put the spreadsheet ID here';
  range = "Sheet1!A1:A1";
  values = {values: [['3','two','nine']]}; // Modified

  url = "https://sheets.googleapis.com/v4/spreadsheets/" +
    id + "/values/" + range + ":append?valueInputOption=USER_ENTERED";

  options = {
    "method":"post",
    "muteHttpExceptions": true,
    "headers": {
      "Authorization": "Bearer " + ScriptApp.getOAuthToken()
    },
    "contentType": "application/json", // Added
    "payload": JSON.stringify(values) // Added
  }

  response = UrlFetchApp.fetch(url,options)
  response = JSON.parse(response);

  //Logger.log('response ' + JSON.stringify(response))
}