Ответ:
Вы не можете запретить пользователю с правами редактирования создавать новые листы или строки, но вы можете запустить триггер onChange()
, который удалит их, как только они будут созданы. .
Дополнительная информация:
Триггер onChange()
Google Sheets - это устанавливаемый триггер, который запускается при внесении изменений в структуру листа. ,
Объект события для события chenged содержит информацию о типе изменения - в частности, INSERT_GRID
и INSERT_ROW
- они относятся к изменению структуры листа нового добавленного листа и вставлена новая строка или диапазон строк.
Отсюда вы можете обрабатывать их немедленное удаление.
Код:
function onChange(e) {
if (e.changeType == "INSERT_GRID") {
// list your sheet names in here:
var sheetNames = ["Sheet1", "Sheet2", "Sheet3"];
var sheets = SpreadsheetApp.getActiveSpreadsheet().getSheets();
if (sheets.length != sheetNames.length) {
for (var i = 0; i < sheets.length; i++) {
if (sheetNames.includes(sheets[i].getName())) {
continue;
}
else {
SpreadsheetApp.getActiveSpreadsheet().deleteSheet(sheets[i])
}
}
}
}
else if (e.changeType == "INSERT_ROW") {
// define how many rows your sheet has here:
var noOfRows = 200;
var sheet = SpreadsheetApp.getActive();
sheet.getRange((noOfRows + 1) + ':' + (noOfRows + 1)).activate();
var currentCell = sheet.getCurrentCell();
sheet.getSelection().getNextDataRange(SpreadsheetApp.Direction.DOWN).activate();
currentCell.activateAsCurrentCell();
sheet.getActiveSheet().deleteRows(sheet.getActiveRange().getRow(), sheet.getActiveRange().getNumRows());
}
}
Настройка триггера:
Сохранить сценарий с помощью значок сохранения, нажмите кнопку запуска (►) и подтвердите аутентификацию запуска скрипта.
Отсюда, после пункта меню «Правка»> «Триггеры текущего проекта», вы откроете новую страницу в G Suite Developer Hub. Нажмите кнопку + Добавить триггер в правом нижнем углу и настройте параметры триггера следующим образом:
- Выберите, какую функцию запустить:
onChange
- Выберите, какое развертывание должно запускаться:
Head
- Выберите источник события:
From spreadsheet
- Выберите тип события:
On change
и нажмите Сохранить.
Удаленные листы:
Это сложная часть; к сожалению, нет способа восстановить удаленные листы, перехватив их с onChange()
.
Однако, если это очень важно, лучше всего порекомендовать взглянуть на версии файлов Drive Drive и файл Drive API revisions: list
* 1057. * и revisions: get
, и сделайте некоторую интеграцию этого на e.changeType == REMOVE_GRID
, но на самом деле вы должны просто пытаться делать резервные копии как можно чаще, чтобы в случае потери важной структуры она могла быть легко восстановленным.
Я надеюсь, что это полезно для вас!
Ссылки: