Google Таблицы: автоматическое обновление с помощью скрипта - не работает

Я создал лист, к которому 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");
}
}
}

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


person DavidAg02    schedule 09.04.2020    source источник
comment
Могу я спросить вас о способе получения данных от IFTTT?   -  person Tanaike    schedule 10.04.2020
comment
Это апплет, он добавляет новую строку с 3 столбцами данных.   -  person DavidAg02    schedule 10.04.2020
comment
Спасибо за ответ. На основании вашего ответа и вашего сценария я предложил в качестве ответа образец сценария. Не могли бы вы это подтвердить? Сначала подтвердите, правильно ли я понимаю вашу цель. Если я неправильно понял ваш вопрос и это было не то направление, в котором вы хотели, я прошу прощения.   -  person Tanaike    schedule 10.04.2020


Ответы (1)


  • You have already done the setting for IFTTT side.
    • It's "Webhooks" as "THIS".
    • Это Добавить строку в электронную таблицу Google Таблиц как ТО.
  • Когда IFTTT добавляет строку со значениями 3 столбцов (столбцы A, B и C), вы хотите поместить дату в столбец D добавленной строки.
  • Имя листа - MBAP.
  • Вы хотите добиться этого с помощью скрипта Google Apps.

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

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

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

В этом ответе ваша цель достигается за счет выполнения сценария с триггером события 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 для THIS и Добавить строку в электронную таблицу Google Sheets для THAT.

Ссылка:

person Tanaike    schedule 10.04.2020