Google Таблицы: действие в зависимости от дня рождения - PullRequest
0 голосов
/ 16 июня 2020

Я пытаюсь отправить себе электронное письмо или скопировать строку на новый лист, когда у кого-то день рождения или годовщина приема на работу. Копирование строки на новый лист позволило бы мне использовать zapier для уведомления меня об обновлении. Либо сработает. В таблице используется форма для сбора данных.

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

Вот этот лист . Это только просмотр, так что просто дайте мне знать, если вам нужен дополнительный доступ.

1 Ответ

1 голос
/ 16 июня 2020

Я понимаю, что вы хотите дублировать лист ответов формы на другой лист (назовем его Zapier Sheet ) автоматически каждый раз, когда добавляется новый ответ формы. Вы можете достичь этой цели, разработав код Apps Script , который запускается при каждом ответе формы. В этом случае вы можете использовать код, похожий на этот:

function so62400514() {
  var formSheet = SpreadsheetApp.openById(
    '{FORM SHEET ID}').getSheets()[0];
  var zapierSheet = SpreadsheetApp.openById(
    '{ZAPIER SHEET ID}').getSheets()[0];
  var formData = formSheet.getRange(1, 1, formSheet.getLastRow(), formSheet
    .getLastColumn()).getValues();
  var zapierData = zapierSheet.getRange(1, 1, zapierSheet.getLastRow(),
    formSheet.getLastColumn()).getValues();
  var recorded = false;

  for (var fr = 0; fr < formData.length; fr++) {
    for (var zr = 0; zr < zapierData.length; zr++) {
      if (formData[fr].toLocaleString() == zapierData[zr].toLocaleString()) {
        recorded = true;
      }
    }

    if (recorded == false) {
      zapierSheet.appendRow(formData[fr]);
    } else {
      recorded = false;
    }
  }
}

Этот код сначала откроет оба листа (используя SpreadsheetApp.openById() и Spreadsheet.getSheets() ), чтобы выбрать данные с помощью Sheet.getRange (установить границы с помощью Sheet.getLastRow() и Sheet.getLastColumn()) и прочитать их с помощью Range.getValues(). После этой операции данные будут повторяться с использованием свойства Array.length в качестве периметра. Итерация сравнивает каждую строку из формы Sheet с каждой строкой zapier листа (для выполнения sh этого я сначала проанализировал строку как строку с Date.toLocaleString()). Если строка формы найдена на листе zapier, логическое значение recorded будет помечено как true. После того, как каждая строка на листе zapier сравнивается со строкой формы, код запишет ее на лист zapier на основе логического флага.

Как объяснялось в предыдущем абзаце, этот код примет лист формы строки, отсутствующие в листе zapier; и наклеить их на лист zapier. Я использовал этот подход, чтобы не пропустить ни одной строки (поскольку это могло произойти, когда одновременные пользователи ответили на форму сразу все). Чтобы сделать это срабатывание автоматически, вам необходимо настроить триггер со следующими настройками:

Installable trigger settings

Например, предположим, что у нас есть эти ответы на формы:

Form data

И наш первоначальный образец zapier-листа выглядит так, как показано ниже. Пожалуйста, обратите внимание, как отсутствуют несколько прошлых строк;

Initial sample zapier sheet

После запуска скрипта (как он будет делать автоматически) это будет результат:

Final sample zapier sheet

Я предлагаю запустить сценарий вручную для начальной настройки. Если отметки времени расходятся, проверьте, совпадают ли часовые пояса в обеих таблицах. Не стесняйтесь задавать мне дополнительные вопросы, чтобы уточнить мой ответ.

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