Google Scripts: триггер не работает или скрипт запускается только один раз - PullRequest
0 голосов
/ 30 марта 2020

Я новичок в Google Scripts, поэтому я боролся с этой проблемой уже несколько дней. Прошли через несколько источников, и ни один не имеет такую ​​же проблему, как я.

Я установил основанный на времени триггер для моего скрипта, чтобы импортировать CSV из моего Gmail в лист. Отправленные электронные письма - это ежедневные отчеты, извлекаемые из DV360, которые затем используются для заполнения информационной панели Data Studio.

Моя первая проблема заключается в том, что либо триггер не работает должным образом (что может быть маловероятным), либо что с моим кодом что-то не так. Одна странная вещь, которую я заметил, состоит в том, что триггер работает для одного из отчетов, но не работает для остальных 6.

У меня есть несколько сценариев в этом проекте, которые все импортируют разные вложения CSV из разных писем и каждый заполнить их собственную вкладку в файле Google Sheets.

После того, как я запустил скрипт один раз и заполнил соответствующий лист, он не запустится снова, даже если в моем почтовом ящике будет электронное письмо с более новым вложением (например, если я запустил скрипт, на следующий день он не заполнит лист отчетом за указанный день.

Ниже приведен код, который я использовал.

function importCSVFromGmail() {
  var threads = GmailApp.search("Label:Audience_List");
  var message = threads[0].getMessages().pop();

  var attachment = message.getAttachments()[0];

  if (attachment != null) {
    var attachName = attachment.getName();

    // Is the attachment a CSV file
    if (attachName.substring(attachName.length-4) === ".csv") {
      var id = "1cl5nZiJ2Jh__pMig-BoGTKpE9kM8-5nYe178WdI6ChI";
      var name = "Audience_List_Backend";
      var sheet = SpreadsheetApp.openById(id);
      var tab = sheet.getSheetByName(name);
      var tabInfo = sheet.getSheetByName("Audience_List_Backend");
      tabInfo.getRange("A1").setValue(new Date());

      // Clear the content of the sheet
      tab.clearContents().clearFormats();
      var csvData = Utilities.parseCsv(attachment.getDataAsString(), ",");
      tab.getRange(1, 1, csvData.length, csvData[0].length).setValues(csvData);
    }
  } 
}

Заранее благодарю за любую помощь!

1 Ответ

1 голос
/ 31 марта 2020

Решение было простым.

Разделите каждый файл сценария на собственный проект и запускайте их по отдельности, используя основанный на времени триггер.

Поэтому у каждого из 7 необходимых мне действий был свой проект с временным триггером.

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