2015-08-21 3 views
1

я написал небольшую функцию:не видя бревна от триггера onEdit

function weeklyCurrency(e) { 
    var changed_cell = e.range.getA1Notation(); 
    Logger.log(changed_cell); 
} 

Затем установите его в качестве устанавливаемого onEdit триггера:

Resources > current projects triggers > weeklyCurreency > onEdit 

сохраненному

Go на лист и введите любое значение в ячейку, затем вернитесь к редактору и щелкните View > Logs:

Подписчиков не найдено. Запустите свой скрипт и повторите попытку.

Я ожидал увидеть, например, "A15".

Почему я ничего не вижу, когда я делаю редактирование?

Я также попытался использовать простую функцию триггера, изменив имя функции на onEdit(), но то же самое; нет результатов.

+0

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

ответ

1

Я не знаю причину этой проблемы, но это то, что я описал как «шелушащееся поведение» Logger.

  • Каждый вызов скрипта очищает журналы. Каждый раз, когда запускается функция onEdit, она получает новую среду исполнения, которая включает в себя пустые журналы. (Итак, если вы сделаете два изменения, второй очистит первый журнал.)
  • И иногда журналы не отображаются вообще. Это может быть связано с тем, что очистка прошлогоднего журнала занимает больше времени, чем запись текущего, поэтому оба они стираются.

В некотором смысле ваш код «работает на меня», потому что я запускал его без изменений и имел журнал регистрации - только не каждый раз. Это затрудняет доверие.

Существуют и другие ситуации, которые делают встроенный Logger непригодным.

Поскольку вы работаете в таблице, у вас есть другие способы отслеживать выполнение кода:

  • toast сообщения

    var ss = e.range.getSheet().getParent(); 
    ss.toast("Changed cell: "+changed_cell); 
    
  • UI alerts

    SpreadsheetApp.getUi().alert("Changed cell: "+changed_cell); 
    
  • Browser messages

    Browser.msgBox("Changed cell: "+changed_cell); 
    
  • Запись в электронную таблицу

    var logSheet = ss.getSheetByName("Log") || ss.insertSheet("Log"); 
    logSheet.appendRow([ new Date(), "Changed cell: "+changed_cell ]); 
    

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

    Вы можете использовать этот последний подход и перегрузить встроенный класс Logger, чтобы все журналы в вашем проекте переходили в электронную таблицу. Вы можете узнать больше об этом в Did you know? (You can log to a spreadsheet from client JavaScript!), в котором более подробно рассматривается эта тема.

Вот демо всех этих вариантов:

// from http://stackoverflow.com/a/32150927/1677912 
function onEdit(e) { 
    var changed_cell = e.range.getA1Notation(); 

    // Built-in Logger 
    Logger.log(changed_cell); 

    // Toast 
    var ss = e.range.getSheet().getParent(); 
    ss.toast("Changed cell: "+changed_cell); 

    // Alert 
    SpreadsheetApp.getUi().alert("Changed cell: "+changed_cell); 

    // Write to spreadsheet 
    Browser.msgBox("Changed cell: "+changed_cell); 
    var logSheet = ss.getSheetByName("Log") || ss.insertSheet("Log"); 
    logSheet.appendRow([ new Date(), "Changed cell: "+changed_cell ]); 

} 
+0

Спасибо. Я закончил писать на лист для целей отладки. Я нашел сложный в использовании встроенный отладчик –

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