当前位置: 首页 > 知识库问答 >
问题:

服务帐户编辑工作表时未触发Google工作表脚本?

裴甫
2023-03-14

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

这是我正在使用的触发器

我作为表单的所有者创建了脚本和触发器,但这并没有解决任何问题,所以我没有主意了。

共有1个答案

华景同
2023-03-14

用代码触发用户事件的唯一方法是使用工作表应用编程接口,通过特殊设置将值设置为USER_ENTERED,并且它只适用于“更改”事件。因此,您需要为“更改”创建第二个触发器,但您可以使用相同的函数名称。虽然您可能需要修改函数来处理不同的事件对象。或者您可以使用不同的函数。

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

可以使用REST API或工作表高级服务。

要使用预付款单服务,代码如下所示:

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))
}

对于REST API,基本代码如下所示:

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))
}
 类似资料:
  • 您好,我正在为D制作一张计划表 我正在尝试编写一个脚本,它将自动隐藏PlayerSheet中所有空的“initiative”单元格。我已经成功地编写了这个脚本,但是我希望它在我编辑MainSheet时触发。因为工作表中的所有日期都来自于使用IMPORTRANGE,所以我无法使用on edit触发器,因为PlayerSheet从未被编辑过。 每当我编辑MainSheet时,是否可以让位于Player

  • 有人能帮我把脚本布局转换成实际的功能代码吗?我有一般的编码知识,但我不知道正确的语法。 基本上,我需要的是一个脚本,当提交表单条目时,它会在所有工作表/选项卡之间循环。表单包含提交表单的人的姓名(字符串)、开始日期、结束日期,最后是注释字段(字符串)。 我需要脚本来遍历每个工作表的第5行,并查找在第一个表单字段中输入的字符串(提交表单的人的姓名)。如果它找到了该名称,它应该将与该名称对应的列保存到

  • 我编写了一个绑定到谷歌电子表格的小脚本,它从最后一行的单元格中读取电子邮件地址并向其发送电子邮件。这些值由一个WebApp(而不是谷歌表单)收集。 我试过各种各样的触发器。时间驱动触发器工作,但电子表格触发器不工作。我都试过了。如果我手动更改电子表格中的某个单元格,onEdit触发器会工作,但当工作表被另一个脚本更改时,它不会启动。

  • 我正在使用谷歌表单来触发这个脚本。 当我用播放按钮运行脚本时,它工作得很好。 当我让提交触发器运行它时,复选框填充正常,但setValue日期没有。 我也试过了但是我得到了相同的结果。 最终目标是让J列在每次提交表单时填充A列中的快照格式日期 我需要此格式在另一张工作表上运行countIfs。 另一种选择是以某种方式将格式标记嵌入到CountIfs命令中,以便它们匹配。

  • 上下文 我正在创建一个股票价格数据数据库。我目前正在使用下面的函数: 这允许在编辑单元格时对某些列执行编辑。到目前为止,它是有效的,但有一些扭结。 问题1 有时,当我编辑列的第四行上方的单元格时,它会编辑整个列,尽管我告诉它从第四行开始。这发生在几分钟前的一个单元格中,我告诉它排除上面的“I2”。我为此编写的代码有什么问题吗? 问题2我尝试为代码创建其他异常,其中对于某些指定的范围,它将仅从不同的

  • 我注意到,当服务工作人员脚本本身加载到浏览器中时,不再触发服务工作人员的读取事件。例如,当我们有一个新版本的服务辅助角色时,旧的服务辅助角色读取事件不会被触发。因此,旧的服务工作者不能再检查新服务工作者的内容。 我确信这以前是可能的,我想知道这是否是一个bug,或者是否对此进行了任何更改。我在官方存储库或W3C草稿中没有找到与此更改相关的任何内容。 为了验证fetch事件没有被触发,我用版本号(参