Как обеспечить, чтобы функции onEdit не пропали - PullRequest
1 голос
/ 25 июня 2019

У меня есть лист Google, где пользователь сканирует штрих-коды продуктов.Мне нужно записать дату и время сканирования продукта, поэтому для этого я создал скрипт onedit.Однако это не постоянно стрельба.

function onEdit(event) { 
var eventRange = event.range;
var s = SpreadsheetApp.getActiveSheet();
if ( s.getName() == "Dolly Returns") {
if (eventRange.getColumn() == 2) { 
var columnARange = 
SpreadsheetApp.getActiveSheet().getRange(eventRange.getRow(), 1, 
eventRange.getNumRows(), 1);
var values = columnARange.getValues();
for (var i = 0; i < values.length; i++) {
values[i][0] = new Date();
}
columnARange.setValues(values);
}
}
}

Если я начну редактировать ячейки в столбце B (относительно быстро), то, похоже, код будет пытаться обновить столбец A для каждого редактирования.Это действительно работает, если вы делаете паузу в несколько секунд между каждым редактированием, но я надеюсь, что код можно улучшить, чтобы он срабатывал 100% времени.

Ответы [ 2 ]

0 голосов
/ 25 июня 2019

Нет никакого способа гарантировать, что onEdit или другие триггеры не "пропустят", но вы могли бы уменьшить вероятность этого

  1. Предотвратите, чтобы ваши пользователи применяли изменения в быстрой последовательности
  2. Уменьшите сложность вашей таблицы, чтобы она могла пересчитать как можно быстрее
  3. Оптимизируйте ваш скрипт onEdit для максимально быстрого выполнения
0 голосов
/ 25 июня 2019

Требование:

Улучшите сценарий, чтобы он работал быстрее, чтобы идти в ногу с быстрым временем сканирования.


Решение:

Используйте объекты событий в ваших интересах, вы неДля этого скрипта не нужны причудливые циклы for и getValues(), он только замедлит ваш скрипт.Реально все, что вам нужно, это имя листа и строка / столбец редактирования.

function onEdit(event) {
  var sh = event.source.getActiveSheet();
  if (sh.getName() === 'Dolly Returns') {
    var col = event.range.getColumn();
    if (col === 2) {
      var row = event.range.getRow();
      sh.getRange(row, 1).setValue(new Date());
    }
  }
}

Объяснение:

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


Время:

Хорошо, вот где вам будет интереснее.Я провел 10 тестов с каждым скриптом.Вот результаты:

Old         New
-----       -----
0.120       0.062
0.132       0.061
0.196       0.060
0.125       0.052
0.130       0.055
0.118       0.054
0.128       0.057
0.138       0.054
0.124       0.056
0.126       0.060

Как видите, это довольно большое улучшение, почти вдвое быстрее с той же функциональностью, что и раньше.Мы по-прежнему проверяем имя листа и столбца и пишем дату точно так же, как это сделал ваш сценарий.


Ссылки:

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