Регистратор Google Script не показывает, на каком листе было выполнено редактирование из данных о событии

Я пытаюсь определить, на каком листе было выполнено редактирование во время установленной функции onEdit.

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

Регистратор:

[19-08-01 08:37:27:714 CDT] {"authMode":{},"range":{"columnStart":4,"rowStart":4,"rowEnd":4,"columnEnd":4},"source":{},"oldValue":"2.0","triggerUid":"1111111","user":{"nickname":"Mike-SMT","email":"[email protected]"},"value":"222"}

Код, используемый для регистрации события:

function raw_data_edited(e) {
  Logger.log(JSON.stringify(e));
}

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

Есть ли способ получить удостоверение личности с мероприятия?


person Mike - SMT    schedule 01.08.2019    source источник
comment
Это может помочь? developers.google.com/apps-script/guides/triggers/events   -  person Rno    schedule 01.08.2019
comment
@ArnovanBoven Я знаю все это, но в приведенном выше журнале source пусто ... Мне нужно, чтобы лист был там 100% времени.   -  person Mike - SMT    schedule 01.08.2019


Ответы (2)


Странно, source всегда кажется пустым при регистрации объекта события, но его все еще можно использовать.

Я не был уверен, что вы имели в виду: идентификатор электронной таблицы или идентификатор листа, поэтому вот как получить оба с помощью объектов события:

//get spreadsheet id using "source" object
e.source.getId();

//get spreadsheet id using "range" object
e.range.getSheet().getParent().getId();

//get individual sheet id using "source" object
e.source.getActiveSheet().getSheetId();

//get individual sheet id using "range" object
e.range.getSheet().getSheetId();

Рекомендации:

person ross    schedule 01.08.2019
comment
Спасибо, Росс. e.source.getActiveSheet() было то, что мне было нужно. Теперь я могу получить определенные данные ячейки из листа, который был отредактирован. Странно, что JSON stringify не называет объект листа в строке. Должно быть невозможно преобразовать имя объекта в строку, я думаю. Спасибо еще раз. - person Mike - SMT; 01.08.2019
comment
@Mike-SMT отлично, вы также можете использовать e.range.getSheet() для достижения того же результата. - person ross; 01.08.2019
comment
Гум. Интересно, какой из них быстрее получить лист тогда. В таблицах Google есть проблема с параллелизмом, поэтому чем быстрее, тем лучше. - person Mike - SMT; 01.08.2019
comment
Судя по очень короткому периоду тестирования, они работают одинаково. Также, возможно, стоит изучить LockService, если у вас возникли проблемы с параллелизмом. - person ross; 01.08.2019
comment
Я начал изучать LockService, однако я нашел способ обойти проблему параллелизма, которая у меня возникла, захватив данные о событиях rowStart, и это, похоже, избавило меня от всех проблем, которые у меня были для функции, которую я сделал. - person Mike - SMT; 01.08.2019

e.range даст вам диапазон, который был отредактирован.

Оттуда вы можете использовать getSheet(), чтобы получить лист. которому принадлежит этот диапазон.

Затем на листе используйте getSheetId(), чтобы получить идентификатор листа

function raw_data_edited(e) {
  Logger.log(JSON.stringify(e));
  var ssID = e.range.getSheet().getSheetId().toString();
  Logger.log(ssID);
}
person ADW    schedule 01.08.2019
comment
Спасибо, это полезная информация, но у Росса было то, что мне было нужно с e.source.getActiveSheet(). - person Mike - SMT; 01.08.2019