【问题标题】:Apps Script with Google Sheets : how to execute ScriptApp.newTrigger?带有 Google 表格的 Apps 脚本:如何执行 ScriptApp.newTrigger?
【发布时间】:2022-07-13 00:54:21
【问题描述】:

我有一个通用的 Google 表格文档标题“路线图”。 我想用它的副本来分享我所有的学生。 例如。 “John Doe 路线图”、“Jame Smith 路线图”…… 当有人在其中一张工作表上工作时,我希望将数据发送到 webhook(用于 Zapier),以自动更新带有“学生进度”的工作表。 为此,我需要在每次修改工作表时触发代码。

❌ 我尝试使用触发器菜单:但是当我创建副本时,触发器并未与电子表格一起复制。

❌ 我尝试了一个简单的触发器 (onEdit()) :它没有被授权,我需要进入代码并第一次手动执行它以添加授权。这不好,因为我需要自动化这个过程。

似乎解决方案是使用已安装的触发器。我在下面的代码中添加了它...但是...如何安装触发器...自动触发?

代码与主文档的副本很好地复制了,但是如果我不去代码手动执行函数createEditTrigger(),则没有安装触发器并且有人修改时不会触发代码复制的文档。 我不知道该怎么做。 这是我的代码:

function createEditTrigger() {
 ScriptApp.newTrigger("sendZap")
   .forSpreadsheet(SpreadsheetApp.getActive())
   .onEdit()
   .create();
}
function sendZap() {
  let ss = SpreadsheetApp.getActive();
  let activeSheet = SpreadsheetApp.getActiveSheet();
  var month = activeSheet.getName();
  var sh1=ss.getSheetByName('1er mois');
  var emailMember = sh1.getRange(5, 4).getValue();
  let data = {
    'currentMonth': month,
    'email': emailMember,
  };
  const params = {
    'method': 'POST',
    'contentType': 'application/json',
    'payload': JSON.stringify(data)
  }
  
  let res = UrlFetchApp.fetch('https://hooks.zapier.com/hooks/catch/XXXXXXXX/', params)
  SpreadsheetApp.getUi().alert("month: " + month + " email: " + emailMember);
}

谢谢。

更新 也许它不起作用,因为当我运行函数时(在代码窗口中),它也以编程方式添加了触发器,它会请求许可。如何避免此授权,因为它仅用于我自己的所有 ss 帐户? 换一种说法:当我保存 ss 的副本时,它也会保存附加的代码。但是我怎样才能复制触发器呢?

【问题讨论】:

  • 目前您在每次编辑 ss 时都运行此代码。检查你的处决。还要检查您的触发器以确保您只有一个触发器。您应该在 createEditTrigger 中创建另一个触发器之前检查该名称的其他触发器
  • 在 onEdit 中进行提取然后启动警报对于用户来说似乎是一种令人难以置信的麻烦,因为它会在每次编辑电子表格时运行
  • 警报仅用于在我修改电子表格时测试脚本。它将被删除以供最终使用。我不明白您所说的触发器名称是什么意思:我创建触发器的所有内容都在这段代码中。
  • createEditTrigger 函数创建了一个 onEdit 触发器,并将其称为 handFunction,其名称在 sendZap 中。最好在创建另一个触发器之前检查是否有其他触发器的 handlerFunction 为 sendZap,因为同一函数有多个 onEdit 触发器可能会导致难以解决的问题。
  • 请记住,如果您创建了触发器,那么它将在每次编辑电子表格时运行该函数,除非您将其限制为特定的工作表、范围或其他内容。

标签: google-apps-script triggers


【解决方案1】:

也许你可以试试这个方法

function onOpen() {
  SpreadsheetApp.getUi().createMenu('? Menu ?')
    .addItem('? Activate', 'activate')
    .addToUi();
}
function activate(){
  myTriggerSetup()
  SpreadsheetApp.getActive().toast('your script is now active !')
}
function myTriggerSetup() {
  if(!isTrigger('onSpeEdit')) {
    ScriptApp.newTrigger('sendZap')
      .forSpreadsheet(SpreadsheetApp.getActive())
      .onEdit()
      .create();
  }
}
function isTrigger(funcName) {
     var r=false;
     if(funcName) {
       var allTriggers=ScriptApp.getProjectTriggers();
       var allHandlers=[];
       for(var i=0;i<allTriggers.length;i++) {
         allHandlers.push(allTriggers[i].getHandlerFunction());
       }
       if(allHandlers.indexOf(funcName)>-1) {
         r=true;
       }
     }
     return r;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多