Какой Скрип для записи последних действий в документе можно использовать?
Нужен скрипт, который будет на определенном листе записывать хронологию действий произведенных в документе.
На каждой строчке поочередно записывается:
- время произведенного действия
- почта редактора (кто внес изменение)
- лист где произошло изменение
- ячейка, которая была отредактирована
- !!!! По возможности скопировать значение, которое туда внес пользователь. (Например было написано в какой то ячейке значение «123», а он вписал новое значение «456».)
Тем самым, я всегда узнаю кто, что, когда и куда вносил изменения.
Т.е. , если в документе кто то откроет какой-нибудь существующий лист и внесет какое либо изменение в любую ячейку, скрипт автоматически соберет информацию на отдельном листе (пусть будет лист А) и запишет все основные сведения об изменении (которые я расписал выше).
Григорий Боев
@ProgrammerForever Куратор тега Google Apps Script
Учитель, автоэлектрик, программист, музыкант
/**
* Возникает при изменении ячейки
* @param {e} event event-объект https://developers.google.com/apps-script/guides/triggers/events?hl=ru
* [ ProgrammerForever (c) 2020 ]
* @return Не возвращает значений
*/
function onEdit(event) {
var as = event.source.getActiveSheet();//Текущий лист
var address = event.range.getA1Notation().toUpperCase();//Адрес ячейки
var row = event.range.getRow(); //Номер строки
var col = event.range.getColumn(); //Номер столбца
var newValue = event.value; //Новое значение
var oldValue = event.oldValue; //Старое значение
var userEmail = event.user.getEmail();//Пользователь(работает только при вручную назначенном триггере)
let archiveSheetName = "sheet";
let ss = SpreadsheetApp.getActiveSpreadsheet();
let archiveSheet = ss.getSheetByName(archiveSheetName) || ss.insertSheet(archiveSheetName);
archiveSheet.appendRow([new Date(), userEmail, as.getName(), address, oldValue, newValue]);
};
Григорий Боев
Возникла проблема. У меня есть скрипт, в котором уже используется функция onEdit.
И если я создаю новый скрипт с этим кодом, то предыдущий перестает работать.
Как мне объединить несколько скриптов с функцией onEdit?
Так у меня первый скрипт выглядит (при заполнении каких-либо данных, я в соответствующей ячейке получаю дату создания и дату последнего изменения):
function onEdit(e) {
var str = e.range.getRow();
var stolb = e.range.getColumn();
Теперь надо задействовать эти оба скрипта одновременно. Не понимаю как...
Написано
Григорий Боев
@ProgrammerForever Куратор тега Google Apps Script
Несколько функций onEdit не надо делать (хотя можно, но не стоит). Просто объедините функции, вызывайте код одной и потом код другой внутри одного onEdit
В простейшем случае:
Григорий Боев, спасибо разобрался! НО, теперь новая проблема....
Я получаю данные о внесенных изменениях на нужном листе в каждой строчке поочередно. Но почту пользователя скрипт автоматически вписывает только мой. Если зайти в гугл таблицу под другим логином (пользователем), то почта уже не отображается с помощью данного скрипта. Но дату внесенного изменения, ячейку, старое и новое значения записываются. Как можно решить проблему? Я так подозреваю что всем пользователям надо будет дать права администратора, но этого делать как то не хочется...