Как можно создать скрипт, который автоматически записывает хронологию действий, произведенных в документе, на отдельном листе? На каждой строке должны быть отображены следующие данные: время действия, e-mail редактора, лист, где были внесены изменения, отредактированная ячейка, а также, по возможности, скопированное значение, которое было внесено пользователем. Это позволит отслеживать изменения в документе и знать, кто, что, когда и где изменил.
Для создания такого скрипта вам потребуется использовать язык программирования, который поддерживает доступ к объектам документа, такие как 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, откройте "Инструменты"-> "Редактор скриптов" и вставьте код в редактор. Далее сохраните скрипт и закройте редактор. Теперь скрипт будет запускаться каждый раз при внесении изменений в документ.
Обратите внимание, что для работы данного скрипта необходимо разрешение на доступ к личным данным и редактирование документов. Рекомендуется внимательно проверить скрипт перед использованием и убедиться, что он соответствует вашим потребностям и безопасности данных.
<pre><code class="javascript">/**
* Возникает при изменении ячейки
* @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]);
};</code></pre>