Трекер электронных таблиц - PullRequest
0 голосов
/ 23 мая 2018

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

Сценарий получает "Timestamp", "Cell address", "Column label" и "Value entered" и разместите его на листе с именем "Tracker", но он будет опубликован дважды

function onEdit() {
  var sheetsToWatch = ['Responses'];
  // name of the sheet where the changelog is stored
  var changelogSheetName = "Tracker";

  var timestamp = new Date();
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getActiveSheet();
  var cell = sheet.getActiveCell();
  var sheetName = sheet.getName();

  // if it is the changelog sheet that is being edited, do not record the change
  if (sheetName == changelogSheetName) return;

  // if the sheet name does not appear in sheetsToWatch, do not record the change
  var matchFound = false;
  for (var i = 0; i < sheetsToWatch.length; i++) {
    if (sheetName.match(sheetsToWatch[i])) matchFound = true;
  }
  if (!matchFound) return;

  var columnLabel = sheet.getRange(/* row 1 */ 1, cell.getColumn()).getValue();
  var rowLabel = sheet.getRange(cell.getRow(), /* column A */ 1).getValue();

  var changelogSheet = ss.getSheetByName(changelogSheetName);
  if (!changelogSheet) {
    // no changelog sheet found, create it as the last sheet in the spreadsheet
    changelogSheet = ss.insertSheet(changelogSheetName, ss.getNumSheets());
    // Utilities.sleep(2000); // give time for the new sheet to render before going back
    // ss.setActiveSheet(sheet);
    changelogSheet.appendRow(["Timestamp", "Cell address", "Column label", "Value entered"]);
    changelogSheet.setFrozenRows(1);
  }
  changelogSheet.appendRow([timestamp, cell.getA1Notation(), columnLabel, cell.getValue()]);
}

1 Ответ

0 голосов
/ 24 мая 2018

Документация по методам Google создает впечатление, что вы можете программно проверить наличие триггера другого пользователя с помощью такой функции:

function triggerLogger() {
  // Read installed triggers for the project.
  var triggers = ScriptApp.getProjectTriggers();
  var installedReport = {};
  triggers.forEach(function (t) { installedReport[t.getUniqueId()] = {
      event: t.getEventType(),
      calledFunction: t.getHandlerFunction(),
      source: t.getTriggerSource(),
      source_id: t.getTriggerSourceId() || "Time-based triggers have no source id."
  }});

  // Read "simple" triggers for the project by checking for globals that start with "on".
  var simpleReport = {};
  for (var thing in this)
    if (thing.indexOf("on") === 0 && thing.length > 2)
      simpleReport[String(thing)] = {def: this[thing]};

  var possibleSimple = Object.keys(simpleReport).length,
      message = "Trigger report: " + triggers.length + " installed";
  if (possibleSimple) message += ", " + possibleSimple + " possible simple triggers";
  message += ".";

  // Log to Stackdriver (so the report can be viewed sensibly).
  console.log({
    message: message,
    installed: Object.keys(installedReport).length ?
        installedReport : "No detected installed triggers.",
    simple: possibleSimple ?
        simpleReport : "No simple triggers used",
    reportRunAs: Session.getActiveUser().getEmail()
  });
}

Но метод getProjectTriggers(),несмотря на утверждение о получении всех установленных триггеров текущего проекта, вы получите ваши установленные триггеры для документа, даже если вы являетесь владельцем документа.

Обратите внимание, что это поведение принято как ошибка (имеется в виду кто-нибудь, когда-нибудь это исправит).Если вы хотите почувствовать, что вы внесли свой вклад в ускорение этой временной шкалы, пожалуйста, звездочка , эта проблема: where to star

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