Триггер Google запускается только в понедельник / среду / пятницу - PullRequest
0 голосов
/ 20 ноября 2018

Я запускаю сценарий SendEmail с тремя триггерами для отправки по понедельникам, средам и пятницам.

У меня есть 10 листов в электронной таблице (каждый из которых содержит SentEmail сценарий и каждый из них должен быть отправлен в те дни, но у меня есть только 20 ограничений триггера)

Это код:

function sendEmail() {
  var s = SpreadsheetApp.getActive().getSheetByName('BCX');
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var range = ss.getActiveSheet().getDataRange();
  var range = s.getRange('B5:Q20');
  var row = ss.getSheetByName('BCX').getRange("J1").getValue();
  var to = "info@google.com";
  var body = '';
  var htmlTable = SheetConverter2.convertRange2html(range);
var body = "Hi Team!"
     + htmlTable
     + "<br/><br/><b><i>**This is an automated email**</i></b><br/><br/>Any question please let me know.<br/><br/>Regards,<br/><br/>";
  var subject = "Google | Report " + row;

  MailApp.sendEmail(to, subject, body, {htmlBody: body});
};

Но если я что-то используюподобно следующему сценарию, он будет создавать 3 триггера каждую неделю, пока не достигнет 20 триггеров (предел триггера).

function createTriggers() {
   var days = [ScriptApp.WeekDay.MONDAY, 
               ScriptApp.WeekDay.WEDNESDAY,                                            
               ScriptApp.WeekDay.FRIDAY];
   for (var i=0; i<days.length; i++) {
      ScriptApp.newTrigger("sendEmail")
               .timeBased().onWeekDay(days[i])
               .atHour(7).create();
   }
};

1 Ответ

0 голосов
/ 13 декабря 2018

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

Внутри сценария последовательность обработки будет выглядеть следующим образом:
1) цикл по электронным таблицам в заданной папке / подпапках Google Диска.- это обеспечивает уникальный идентификатор электронной таблицы.
2) для каждой электронной таблицы, получите идентификатор и используйте openById(ID), чтобы открыть электронную таблицу.
3) получите листы для электронной таблицы
4) для каждого листаиспользуйте исходный код для создания и отправки электронного письма.
5) промойте и повторите для следующего листа и следующей таблицы.

Следующий непроверенный код объединяет поиск для каждогоэлектронная таблица в определенной папке и подпапках, открывая электронную таблицу и получая листы, а затем просматривая каждый лист.Спрашивающему нужно только добавить имя папки Google Drive для начала поиска и поместить свой собственный код в двух указанных местах.

function 53383834() {
    /* Adapted from Code written by @hubgit https://gist.github.com/hubgit/3755293
    Updated since DocsList is deprecated  https://ctrlq.org/code/19854-list-files-in-google-drive-folder
    */


    // List all files and sub-folders in a single folder on Google Drive
    // declare the folder name
    var foldername = 'XXXXXXXXXXXXXXXXXX'; // enter the folder name

    // declare this sheet
    var ss = SpreadsheetApp.getActiveSpreadsheet();
    var sheet = ss.getActivesheet();

    // getFoldersByName = Gets a collection of all folders in the user's Drive that have the given name.
    // folders is a "Folder Iterator" but there is only one unique folder name called, so it has only one value (next)
    var folders = DriveApp.getFoldersByName(foldername);
    var foldersnext = folders.next();

    // list files in this folder
    var myfiles = foldersnext.getFiles();

    // spreadsheets have a unique MIME-Type = application/vnd.google-apps.spreadsheet
    var searchTerm = 'spreadsheet';

    // loop through files in this folder
    while (myfiles.hasNext()) {
        var myfile = myfiles.next();
        var fname = myfile.getName();
        var fid = myfile.getId();

        // get the MIME-Type and test whether the file is a spreadsheet
        var ftype = myfile.getMimeType();
        var indexOfFirst = ftype.indexOf(searchTerm);
        if (indexOfFirst != -1) {
            var ssid = fid;
            // open the spreadsheet
            var sso = SpreadsheetApp.openById(ssid);
            // get the sheets
            var sheets = sso.getSheets();
            var sheetlen = sheets.length;
            for (var i = 0; i < sheetlen; i++) {
                // get the sheets, one by one
                var thissheet = sso.getSheets()[i];

                <<
                insert questioners code here >>

            }

        }

    }


    // Now get the subfolder
    // subfolders is a Folder Iterator
    var subfolders = foldersnext.getFolders();


    // now start a loop on the SubFolder list
    while (subfolders.hasNext()) {
        var subfolderdata = [];
        var mysubfolders = subfolders.next();
        var mysubfolder = mysubfolders.getName();

        // Get the files
        var mysubfiles = mysubfolders.getFiles();

        // now start a loop on the files in the subfolder
        while (mysubfiles.hasNext()) {

            var smyfile = mysubfiles.next();
            var sfname = smyfile.getName();
            var sfid = smyfile.getId();
            var sftype = smyfile.getMimeType();
            var indexOffolder = sftype.indexOf(searchTerm);
            if (indexOffolder != -1) {
                var ssid = sfid;
                // open the spreadsheet
                var sso = SpreadsheetApp.openById(ssid);
                // get the sheets
                var sheets = sso.getSheets();
                var sheetlen = sheets.length;
                for (var i = 0; i < sheetlen; i++) {
                    // get the sheets, one by one
                    var thissheet = sso.getSheets()[i];

                    <<
                    insert questioners code here >>

                }

            }

        }

    }

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