Как можно написать скрипт для сохранения истории последних действий в документе?

Как можно создать скрипт, который автоматически записывает хронологию действий, произведенных в документе, на отдельном листе? На каждой строке должны быть отображены следующие данные: время действия, e-mail редактора, лист, где были внесены изменения, отредактированная ячейка, а также, по возможности, скопированное значение, которое было внесено пользователем. Это позволит отслеживать изменения в документе и знать, кто, что, когда и где изменил.
  • 28 апреля 2024 г. 19:00
Ответы на вопрос 2
Для создания такого скрипта вам потребуется использовать язык программирования, который поддерживает доступ к объектам документа, такие как Google Apps Script для Google Sheets или VBA для Excel.

Ниже приведен пример скрипта на Google Apps Script для Google Sheets, который сохраняет историю последних действий в документе:

```javascript
function onEdit(e) {
  var sheet = e.source.getActiveSheet();
  var range = e.range;
  var editor = Session.getActiveUser().getEmail();
  var timestamp = new Date();
  var value = e.value || "No value";

  var historySheet = e.source.getSheetByName("History");
  if (!historySheet) {
    historySheet = e.source.insertSheet("History");
    historySheet.appendRow(["Time", "Editor", "Sheet", "Edited Range", "New Value"]);
  }

  historySheet.appendRow([timestamp, editor, sheet.getName(), range.getA1Notation(), value]);
}
```

Этот скрипт будет работать в Google Sheets и сохранять историю последних действий на лист "History" в том же документе.

Чтобы использовать этот скрипт, перейдите в Google Sheets, откройте "Инструменты"-> "Редактор скриптов" и вставьте код в редактор. Далее сохраните скрипт и закройте редактор. Теперь скрипт будет запускаться каждый раз при внесении изменений в документ. 

Обратите внимание, что для работы данного скрипта необходимо разрешение на доступ к личным данным и редактирование документов. Рекомендуется внимательно проверить скрипт перед использованием и убедиться, что он соответствует вашим потребностям и безопасности данных.
/**
 * Возникает при изменении ячейки
* @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]);
};
Похожие вопросы