即使关闭工作表也可以运行脚本吗?

问题描述 投票:0回答:2

我有一个使用googlesheets的脚本,我对此也很陌生,有触发器

onOpen()
,当打开工作表时,它会运行其中的内容,但是即使工作表未打开,我也想运行一个函数。我需要触发器才能执行此操作吗?我应该用什么来做到这一点?

我尝试过:

  • 创建时
  • 可安装
  • 编辑时

我想创建一个基于时间的触发器,即使工作表未打开和/或即使我没有登录到工作表,脚本也会运行。

我尝试过:

function onOpen() {
 
     // Trigger every 10 minutes.
    ScriptApp.newTrigger('myFunc') //Run Update All Sheets
        .timeBased()
        .everyMinutes(10)
        .create();

}

以及脚本之外。我想知道其中哪一个是背景作品。

 // Trigger every 10 minutes.
ScriptApp.newTrigger('myFunc') //Run Update All Sheets
        .timeBased()
        .everyMinutes(10)
        .create();

function onOpen() {
 

}
google-sheets google-apps-script triggers
2个回答
2
投票

可以通过编程方式添加触发器。

https://developers.google.com/apps-script/guides/triggers/installable


Managing triggers programmatically
You can also create and delete triggers programmatically with the Script service. Start by calling ScriptApp.newTrigger(functionName), which returns a TriggerBuilder.

The following example shows how to create two time-driven triggers—one that fires every 6 hours, and one that fires every Monday at 9 a.m. (in the time zone that your script is set to).

triggers/triggers.gsView on GitHub
/**
 * Creates two time-driven triggers.
 */
function createTimeDrivenTriggers() {
  // Trigger every 6 hours.
  ScriptApp.newTrigger('myFunction')
      .timeBased()
      .everyHours(6)
      .create();

  // Trigger every Monday at 09:00.
  ScriptApp.newTrigger('myFunction')
      .timeBased()
      .onWeekDay(ScriptApp.WeekDay.MONDAY)
      .atHour(9)
      .create();
}

This next example shows how to create an installable open trigger for a spreadsheet. Note that, unlike for a simple onOpen() trigger, the script for the installable trigger does not need to be bound to the spreadsheet. To create this trigger from a standalone script, simply replace SpreadsheetApp.getActive() with a call to SpreadsheetApp.openById(id).

triggers/triggers.gsView on GitHub
/**
 * Creates a trigger for when a spreadsheet opens.
 */
function createSpreadsheetOpenTrigger() {
  var ss = SpreadsheetApp.getActive();
  ScriptApp.newTrigger('myFunction')
      .forSpreadsheet(ss)
      .onOpen()
      .create();
}

To programmatically modify an existing installable trigger, you must delete it and create a new one. If you have previously stored the ID of a trigger, you can delete it by passing the ID as an argument to the function below.

triggers/triggers.gsView on GitHub
/**
 * Deletes a trigger.
 * @param {string} triggerId The Trigger ID.
 */
function deleteTrigger(triggerId) {
  // Loop over all triggers.
  var allTriggers = ScriptApp.getProjectTriggers();
  for (var i = 0; i < allTriggers.length; i++) {
    // If the current trigger is the correct one, delete it.
    if (allTriggers[i].getUniqueId() === triggerId) {
      ScriptApp.deleteTrigger(allTriggers[i]);
      break;
    }
  }
}




1
投票

打开你的谷歌表格 单击工具 单击脚本编辑器

创建一个函数。每天的生日问候语示例如下

function hbd_mail() { //birth day mail daily 7 am from hrd login
   var ss = SpreadsheetApp.getActiveSpreadsheet();
   var sheet = ss.getSheetByName("Emp");
   var today=new Date();
   lastRow = sheet.getLastRow();
   var values = sheet.getRange('A:T').getValues();
   for (i=1;i<lastRow;i++){
      if (values[i][14]=="") {} else {
      if ( Utilities.formatDate( values[i][14] ,"GMT+05:30", "dd-MMM") == Utilities.formatDate( today ,"GMT+05:30", "dd-MMM") && values[i][18]=="Yes"  ) {
      var message = 'Dear '+ values[i][1]+',\n\nMegawin Collective wishes you a very happy birth day ('+  Utilities.formatDate( values[i][14] ,"GMT+05:30", "dd-MMM")+ ').\n\nHRD Megawin Switchgear Pvt Ltd';
     var subject = "Happy Birth Day "+values[i][1];
     if (values[i][7]=="") {} else {GmailApp.sendEmail(values[i][7], subject, message);}
      }//if
     }
   }//for
}

保存脚本
单击菜单中的时钟
它会询问您函数名称 - 选择上面的函数
然后选择基于时间
每小时/每天/每周等点击
保存起来。

现在该功能将从谷歌服务器自动运行(以您选择的频率),而无需您执行任何操作。

非常简单。

© www.soinside.com 2019 - 2024. All rights reserved.