Если мое понимание правильное, как насчет этого обходного пути?Пожалуйста, подумайте об этом как об одном из нескольких обходных путей.
Когда электронная таблица модифицируется извне, даже если были нажаты клавиши CMD + Z (или CTRL + Z), измененное действие нельзя отменить.В этом обходном пути я использовал это.
Модифицированный скрипт:
Прежде чем использовать этот скрипт, , пожалуйста, установите функцию sample()
как триггер события OnEdit. Таким образомКогда вы редактируете ячейку, автоматически запускается функция sample()
.Вы можете увидеть, как установить триггер на здесь .
function sample(e) {
if (e.source.getActiveSheet().getSheetName() == "Sheet1") {
var sheet = SpreadsheetApp.openById(e.source.getId()).getSheetByName("Sheet1"); // Modified
var values = sheet.getRange(3, 3, sheet.getLastRow() - 1, 1).getValues();
var rangeList = values.reduce(function(ar, e, i) {
if (i > 0 && (values[i - 1][0] != e[0] && e[0] != "")) {
ar.push("A" + (i + 2) + ":P" + (i + 2));
}
return ar;
}, [])
rangeList.push(sheet.getRange(sheet.getLastRow(), 1, 1, sheet.getLastColumn()).getA1Notation());
sheet.getRange(1, 1, sheet.getMaxRows(), sheet.getMaxColumns()).setBorder(null, null, null, null, false, false);
sheet.getRangeList(rangeList).setBorder(null, null, true, null, false, false, "black", SpreadsheetApp.BorderStyle.SOLID_THICK);
}
}
Примечание:
- Когда вы используете этот скрипт, пожалуйста, переименуйте функцию
onEdit(e)
к другому имени, как onEdit_sample(e)
.Поскольку в сценарии есть onEdit()
, запускаются оба sample()
, установленные как триггер OnEdit, и onEdit()
.Пожалуйста, будьте осторожны.
Ссылки:
Если я неправильно понял ваш вопрос, прошу прощения.
Редактировать:
По вашему дополнительному запросу я добавил пример сценария для установки триггера события OnEdit дляфункция sample()
.
Пример сценария:
var id = SpreadsheetApp.getActiveSpreadsheet().getId();
ScriptApp.newTrigger("sample").forSpreadsheet(id).onEdit().create();