Я рад сообщить, что проблема решена!
Первое действие (logTimestamp)
if ((editedColumn() > 7) && (editedRow > 4)) {
Я случайно упомянул editedColumn как функцию, а не как переменная.
Второе действие (restoreRangeSettings)
Я выбрал другую стратегию для требуемого результата, основываясь на этом ответе . (Смотрите обсуждение того, чего я пытался достичь здесь .)
Третье действие (общее)
Я немного побаловался с определением переменных. Например - определение диапазона как "e.range
" не сработало, а определение как "e.source.getActiveRange()
" магическим образом.
Наконец - окончательный код
function restoreRangeSettings(e) {
// retrieves data validation, conditional formatting and formatting settings from template
var editedSs = e.source;
var editedRange = editedSs.getActiveRange();
var editedSh = editedRange.getSheet().getName();
var templateSs = SpreadsheetApp.openById('10zVclYTCEOEwskUID4vxSPxKR_tb3RaR76eG7TfxLUE');
var templateSh = templateSs.getSheetByName(editedSh);
var copiedSh = templateSh.copyTo(editedSs).hideSheet();
var templateRange = editedSs.getSheetByName(copiedSh.getName()).getRange(editedRange.getA1Notation());
templateRange.copyTo(editedRange, SpreadsheetApp.CopyPasteType.PASTE_FORMAT, false);
templateRange.copyTo(editedRange, SpreadsheetApp.CopyPasteType.PASTE_CONDITIONAL_FORMATTING, false);
templateRange.copyTo(editedRange, SpreadsheetApp.CopyPasteType.PASTE_DATA_VALIDATION, false);
editedSs.deleteSheet(copiedSh);
}
function logTimestamp(e) {
// logs task last edit timestamp
var editedRange = e.range;
var editedSh = editedRange.getSheet();
var editedRow = editedRange.getRow();
var editedColumn = editedRange.getColumn();
var emailCell = editedSh.getRange(editedRow,5);
var dateCell = editedSh.getRange(editedRow,4);
var time = new Date();
time = Utilities.formatDate(time, "GMT+02", "dd/MM/yyyy HH:mm:ss");
// don't do anything if edited sheets are not task sheets
if ((editedSh.getName() == 'instructions') || (editedSh.getName() == 'generate report')) {return;}
// logs timestamp when the edited range is within the task documentation table
if ((editedColumn > 7) && (editedRow > 4)) {
// adds user and month to also to next row when task is added
if ((editedSh.getRange(editedRow,5,1,3).getValues() != '') && (editedColumn == 8) && (editedSh.getRange(editedRow+1,4).isBlank())) {
editedSh.getRange(editedRow+1,5,1,3).setValues(editedSh.getRange(editedRow,5,1,3).getValues());
}
dateCell.setValue(time);
}
}
Примечание : скрипт электронной таблицы не изменился.