Сохранить журнал в другой таблице Google - PullRequest
0 голосов
/ 02 марта 2020

После некоторых исследований мне удалось найти скрипт, который будет записывать все изменения на моем листе на другой лист под названием «НЕ УДАЛЯТЬ», но я не могу найти, как это изменить, чтобы внести изменения в совершенно другой книга Google не находится в той же книге на другом листе.

Может кто-нибудь помочь мне с этим?

Я пытался выполнить это Копировать данные электронной таблицы Google на другой лист с помощью скрипта Apps но я не могу заставить его работать.

function onEdit(e) {  
  var changelogSheetName = "DO NOT DELETE";
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var cell = SpreadsheetApp.getActiveRange();
  var getColumn = ss.getActiveRange().getColumn();
  var timestamp = new Date();
  var currentSheet = ss.getActiveSheet();
  var currentSheetName = currentSheet.getName();
//var previousValue = e.oldValue();
  var newValue = cell.getValue();
  var typeChange = "Edit";

// if it is the changelog sheet that is being edited, do not record the change to avoid recursion
 if (ss.getActiveCell().getColumn() !== 15) return;
 var changelogSheet = ss.getSheetByName(changelogSheetName);
 var jnum = ss.getActiveCell().offset(0, -12).getValue()
 var Deadline = ss.getActiveCell().offset(0, -7).getValue()
 if (changelogSheet == null) {

// no changelog sheet found, create it as the last sheet in the spreadsheet
changelogSheet = ss.insertSheet(changelogSheetName, ss.getNumSheets());

Utilities.sleep(2000); // give time for the new sheet to render before going back

ss.setActiveSheet(currentSheet);    
changelogSheet.getRange('A1:G1').setBackground('#E0E0E0');
changelogSheet.appendRow(["Timestamp", "Sheet", "Cell", "Type", "Old Value", "New Value", "User"]);
changelogSheet.deleteColumns(8,19);
changelogSheet.setFrozenRows(1);
changelogSheet.setColumnWidth(1, 170);
changelogSheet.setColumnWidth(7, 170);
changelogSheet.protect();
 }
var user = Session.getEffectiveUser().getEmail();
/*if (previousValue == null){
typeChange = "Add";
} else if (newValue == "") {
typeChange = "Remove";  
 }*/

 //changelogSheet.appendRow([timestamp, currentSheetName, cell.getA1Notation(), typeChange, newValue, user, ss.getActiveCell().offset(0, -12).getValue()]);
changelogSheet.appendRow([timestamp, newValue, user, jnum, Deadline, currentSheetName]);
 }

1 Ответ

0 голосов
/ 02 марта 2020

Вместо getActiveSpreadsheet() в следующей кодовой строке:

var ss = SpreadsheetApp.getActiveSpreadsheet();

вы можете использовать open(file), openById(id) или openByUrl(url)

Вместо простого триггера используйте Устанавливаемый триггер. Для этого измените имя функции и следуйте инструкциям https://developers.google.com/apps-script/guides/triggers/installable.

Сводка, у вас есть две альтернативы для создания устанавливаемых триггеров: 1) с помощью кода, 2) с помощью Пользовательский интерфейс скрипта Google Apps.

Ссылки

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