Google Sheets: автоматическое обновление с использованием скрипта - не работает - PullRequest
1 голос
/ 09 апреля 2020

Я создал лист, к которому IFTTT автоматически добавляет строку, когда меняется качество воздуха в моем доме. Эта часть работает правильно.

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

Сценарий работает, если у меня открыта таблица, и редактирую ячейку вручную. Это не работает, когда IFTTT делает обновление. Я установил триггер, который должен запускать этот скрипт каждый раз, когда редактирование выполняется на листе.

Вот сценарий:

function onEdit() {

var s = SpreadsheetApp.getActiveSheet();

if( s.getName() == "MBAP" ) {

var r = s.getActiveCell();

if( r.getColumn() == 1 ) {

var start = r.offset(0, 3);

start.setValue(new Date()).setNumberFormat("MM/DD/YY HH:mm:ss");
}
}
}

Спасибо за помощь!

1 Ответ

1 голос
/ 10 апреля 2020
  • Вы уже выполнили настройку для стороны IFTTT.
    • Это "Webhooks" как "ЭТО".
    • Это "Добавить строку в электронную таблицу" "Листов Google" как "ЭТО".
  • Когда IFTTT добавляет строку со значениями 3 столбцов (столбцы «A», «B» и «C»), вы хотите поместить дату в столбец «D» добавленной строки.
  • Имя листа - "MBAP".
  • Вы хотите добиться этого с помощью Google Apps Script.

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

Проблема и обходное решение:

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

Когда я увидел «Добавить строку в электронную таблицу» в «Google Sheets» как «ТО», я подумал, что значения могут быть добавлены Sheets API. Поэтому, когда я тестировал триггер события OnChange для этой ситуации, было обнаружено, что при добавлении строки запускается триггер события. Ref Из этого результата было обнаружено, что "Google Sheets" IFTTT помещает значения в таблицу Google с помощью API Sheets.

В этом ответе ваша цель достигается с помощью сценария, выполняющегося с триггер события OnChange.

Использование:

1. Подготовьте пример сценария.

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

function onChange(e) {
  const sheet = e.source.getSheetByName("MBAP");
  sheet.getRange(sheet.getLastRow(), 4)
    .setValue(new Date())
    .setNumberFormat("MM/DD/YY HH:mm:ss");
}

2. Установите триггер события OnChange.

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

3. Тестовый скрипт-пример.

Чтобы протестировать скрипт-образец, пожалуйста, отправьте запрос на веб-крючок IFTTT. Таким образом, отметка времени new Date() помещается в последний столбец добавленной строки, помещенной IFTTT.

Примечание:

  • В этом примере сценария предполагается, что ваш апплет IFTTT установлен как "Webhooks" для "ЭТОГО" и "Добавить строку в электронную таблицу" из "Google Sheets" в "ЭТО".

Ссылка:

...