2015-05-28 2 views
0

После каждого добавления новой записи в мой лист google мне нужно, чтобы скрипт проверял комбинацию ячеек, затем убедитесь, что результат проверки был изменен перед отправкой электронной почты. Я знаю, как сделать валидацию и предоставить правильный результат, используя формулу в электронной таблице, и я знаю, как проверить сценарий этого поля и запустить его. Это работает, когда кто-то редактирует лист из пользовательского интерфейса. Проблема заключается в том, что электронная таблица не обновляется через пользовательский интерфейс (это делается с помощью рецепта IFTTT), поэтому я не думаю, что поле проверки пересчитывается до запуска скрипта, что означает, что не отправляется электронное письмо.Используйте формулу Google Sheet в скрипте

Следующая формула и сценарий отлично работают, когда она обновляется через пользовательский интерфейс. Мой вопрос: есть ли способ вычислить переменную «значение» из приведенного ниже сценария с помощью формулы из таблицы?

Формула, которая находится в ячейке "D2" Листа "состояние":

= IF ((СЧЕТЕСЛИ (INDEX (данные! A1: D5032, (SUMPRODUCT (MAX ((данные А: А = "meloc ") * (ROW (данные! A: A))))), 4)," введено ") + COUNTIF (ИНДЕКС (данные! A1: D5032, (SUMPRODUCT (MAX ((данные! A: A = youloc ") * (ROW (данные A: A))))), 4)," вошел «))> 0,9999999999999,1111111111111)

скрипт, который отлично работает с триггером onEdit когда лист редактируется через пользовательский интерфейс:

function myNotification() { 
    var ss = SpreadsheetApp.getActiveSpreadsheet(); 
    var value = ss.getSheetByName("state").getRange("D2").getValue(); 
    if(value > 0) { 
    var last = ScriptProperties.getProperty("last"); 
    value = value.toString(); 
    if(value != last) { 
     MailApp.sendEmail('[email protected]', 'Status #'+value+'\n\n', 
         '1="not here", 9="here": '+value+'\n\n', { 
         cc: '[email protected]' 
         }); 
     ScriptProperties.setProperty("last", value); 
    } 
    } 
} 

ответ

0

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

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

если он изменился, обработайте весь лист снова.

+0

Спасибо за ответ. Это так же просто, как заставить скрипт запускать каждую минуту, или есть дополнительный код, который мне нужно добавить? Часть того, что я не знаю, заключается в том, что формула пересчитывается после каждого изменения api. –

+0

дайте ему попробовать. не уверен, что формула будет пересчитываться именно тогда. –

+0

Настройка скрипта для запуска каждой минуты отлично работала. Никаких других изменений не требуется. Спасибо! –

Смежные вопросы