- Вы хотите открыть диалоговое окно, только когда владелец открывает электронную таблицу.
- Когда общие пользователи, не являющиеся владельцами, открывают электронную таблицу, вы не хотите открывать это диалоговое окно.
Если мое понимание верно, как насчет этой модификации?
Точки модификации:
В этой модификации она знает, открыл ли владелец электронную таблицу, получив электронную почту активного пользователя..
- Когда владелец открывает электронную таблицу, значением
Session.getActiveUser().getEmail()
является адрес электронной почты владельца. - Когда пользователи, не являющиеся владельцами, открывают электронную таблицу, значение
Session.getActiveUser().getEmail()
отсутствует.
Используется.
Модифицированный скрипт:
function onOpen() {
var email = Session.getActiveUser().getEmail();
if (email) {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var ui = SpreadsheetApp.getUi();
var Alert = ui.alert("TEXT HERE");
}
}
Примечание:
- В случае вашейВ сценарии не требуется устанавливать функцию в качестве устанавливаемого триггера OnOpen.
- Даже если установлен устанавливаемый триггер OnOpen, когда пользователи открывают электронную таблицу, значение
Session.getActiveUser().getEmail()
не восстанавливается.Поэтому я думаю, что это можно использовать.В то время Session.getActiveUser().getEmail()
имеет адрес электронной почты владельца.
Ссылка:
ЕслиЯ неправильно понял ваш вопрос, и это был не тот результат, который вы хотите, извиняюсь.
Редактировать 1:
Если все пользователи установят триггер, Session.getEffectiveUser().getEmail()
вернет значение.Таким образом, значение необходимо сравнивать со значением зарегистрированных пользователей.В этом примере сценария предполагается следующее:
- Пользователи «email1» и «email2» устанавливают устанавливаемый триггер OnOpen для каждого пользователя .
Пример сценария:
var users = ["email1", "email2",,,]; // Please set emails of users who can open the dialog.
var email = Session.getEffectiveUser().getEmail();
if (users.indexOf(email) > -1) {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var ui = SpreadsheetApp.getUi();
var Alert = ui.alert("TEXT HERE");
}
Редактировать 2:
Когда я только что проверил эту ситуацию 3 пользователями, я заметил новую проблему.
Сначала этоПредполагается следующее.
- Электронная таблица является общей и используется 3 пользователями, являющимися владельцем, user1 и user2.
- Функция запускается
onOpen_sample(){}
при открытии электронной таблицы. - Когда владелец и пользователь1 могут запустить сценарий и открыть диалоговое окно
ui.alert("TEXT HERE")
.
В этой ситуации получаются следующие результаты.
- Владелец установлен
onOpen_sample()
как триггер OnOpen. Session.getActiveUser().getEmail()
возвращает электронную почту владельца. Session.getEffectiveUser().getEmail()
возвращает электронную почту владельца.
- User1 установлен
onOpen_sample()
в качестве триггера OnOpen. Session.getActiveUser().getEmail()
не возвращает значения. Session.getEffectiveUser().getEmail()
возвращает адрес электронной почты пользователя 1.
Здесь
- Пользователь2 не устанавливает
onOpen_sample()
как триггер OnOpen. Session.getActiveUser().getEmail()
не возвращает значения. Session.getEffectiveUser().getEmail()
возвращает электронную почту пользователя user1. - Это не электронная почта владельца.
И, кроме того,
- User2 установлен
onOpen_sample()
в качестве триггера OnOpen. Session.getActiveUser().getEmail()
не возвращает значения. Session.getEffectiveUser().getEmail()
возвращает адрес электронной почты владельца. - Это не электронная почта пользователя 2.
А также, когда я установил триггер OnOpen несколькоИногда, даже если user1 и user2 устанавливают триггер, Session.getEffectiveUser().getEmail()
возвращает только электронную почту владельца.
Таким образом, все пользователи могут запускать сценарий и открывать диалоговое окно.Я думал, что ваша проблема может быть в этом.Я думаю, что это может быть ошибкой.Поэтому я хотел бы сообщить об этом в систему отслеживания проблем.
Из этой ситуации на текущем этапе был найден следующий результат.
- Только владелец может запустить сценарий иоткройте диалоговое окно.
- Определенные пользователи не могут запустить сценарий и открыть диалоговое окно.
Я извиняюсь, что ваша проблема не была решена.Если бы я нашел обходной путь, я хотел бы сообщить здесь.