У меня есть сценарий Time Out / Time In, над которым я работаю уже несколько недель.Я очень новый, поэтому потребовалось много исследований и помощи.Сейчас сценарий работает так, как задумано, но я хотел использовать Google Sheets специально для того, чтобы делиться листами с другими аккаунтами.Идея состоит в том, что один компьютер будет хостом и просто подготовит листы для сбора данных.На другом компьютере, давайте назовем их, Клиенты выбирают местоположения через выпадающий список в Колонке C или вводят местоположения в Колонке C. Функция onEdit активируется, только если Колонка C была отредактирована на листе ACTIVE. (Лист, предназначенный для использованияклиенты) После того, как они что-то изменили, onEdit использует, если столбец C равен определенным вещам, затем запускает другую функцию, которая вставляет информацию в лист PASSIVE.возможность редактировать что-либо на листе PASSIVE.Один из способов сделать это - использовать Google Sheets, чтобы просто защитить лист PASSIVE от других пользователей, но когда я делал это, каждый раз, когда они редактировали столбец C, эта функция не воспроизводилась.Возможно, потому что скрипт не может вставить в защищенный лист?Я подумал, что случится так, что, отредактировав столбец C на клиентском компьютере, он также отредактирует столбец C на хост-компьютере, и на хост-компьютере будет активирована функция onEdit.Но, видимо, функции onEdit активируются, только если они редактируются вручную, установка значений через скрипт не обрезает их.Я ошибся?
Еще одна вещь, которую я сделал - это скрыть лист PASSIVE, но оставил его редактируемым, это сработает, но они все равно могут просто щелкнуть мышью по представлению и открыть его снова.Есть ли способ предотвратить это?
Я пытаюсь сделать этот скрипт неразборчивым с клиентского компьютера.
Вот несколько строк кода, чтобы показать вам, что я имею в виду.
function onEdit(e) {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var row = getCurrentRow()
var Location = getValue('ACTIVE!C' + row)
var firstName = getValue('ACTIVE!A' + row)
var lastName = getValue('ACTIVE!B' + row)
var passiveRow = findRows(1,firstName,2,lastName,5,"",'PASSIVE');
if(SpreadsheetApp.getActiveSheet().getName() !== "ACTIVE") return;
if(Location !== 'OFFICE' && Location !== "" && passiveRow !== "") {
timeIn();
places();
Logger.log(passiveRow)
}
else if(Location !== 'OFFICE' && Location !== "" && passiveRow == "") {
places();
Logger.log(passiveRow)
}
else if(Location === 'OFFICE') {
timeIn();
}
}
The findRows"функция - это функция, которая находит строку внутри скрипта PASSIVE, которая соответствует критериям, и дает мне строку для размещения функции TimeIn.
В конце концов, мне все равно, какой метод используется,может быть, есть лучший, о котором я не думаю.Способ удержать Клиента от редактирования листа PASSIVE, но он все еще может Редактировать лист ACTIVE, и код будет работать правильно.