gs - возможно ли запустить скрипт, даже если листы закрыты? - PullRequest
1 голос
/ 06 апреля 2020

У меня есть скрипт, который использует googlesheets, я новичок в этом, есть триггер onOpen(), и когда лист открыт, он запускает что-то внутри него, однако я хотел запустить функцию, даже если лист не открыт. Нужен ли мне триггер для этого? Что я должен использовать для этого?

Я попробовал:

OnCreate Installable OnEdit

Я хочу создать основанный на времени триггер, будет ли скрипт выполняться, даже если лист не открыт и / или даже если я не вошел в Sheets.

Я пробовал:

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() {


}

Ответы [ 2 ]

0 голосов
/ 08 апреля 2020

Можно добавить триггер программно.

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



0 голосов
/ 06 апреля 2020

Откройте свой лист Google. Нажмите Инструменты. Нажмите Редактор скриптов

Создайте функцию. Пример приветствия ко дню рождения каждый день показан ниже

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
}

Сохранение сценария
Нажмите Часы в меню
Он спросит у вас имя функции - выберите вышеуказанную функцию
Затем выберите на основе времени
Clcik каждый час / день / неделя и т. д. c
Сохраните его.

Теперь функция будет запускаться автоматически с сервера Google (с выбранной вами частотой) без необходимости делать это что угодно.

Это довольно просто.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...