Всплывающее окно, чтобы показать только для владельца документа - PullRequest
0 голосов
/ 23 февраля 2019

У меня есть следующий скрипт для простого всплывающего окна при открытии документа.Есть ли способ, чтобы это всплывающее окно показывалось только владельцу листа, а не всем другим пользователям, которым предоставлен доступ к документу?

function onOpen() {
var ss=SpreadsheetApp.getActiveSpreadsheet();
var ui = SpreadsheetApp.getUi();
var Alert = ui.alert("TEXT HERE");
}

Мой вариант использования этого сообщения - это сообщение, видимое только мне каквладелец документа, который я не хочу видеть никому другому с правами на совместное использование, т.е. клиентам.

1 Ответ

0 голосов
/ 24 февраля 2019
  • Вы хотите открыть диалоговое окно, только когда владелец открывает электронную таблицу.
  • Когда общие пользователи, не являющиеся владельцами, открывают электронную таблицу, вы не хотите открывать это диалоговое окно.

Если мое понимание верно, как насчет этой модификации?

Точки модификации:

В этой модификации она знает, открыл ли владелец электронную таблицу, получив электронную почту активного пользователя..

  • Когда владелец открывает электронную таблицу, значением 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").

В этой ситуации получаются следующие результаты.

  1. Владелец установлен onOpen_sample() как триггер OnOpen.
    • Session.getActiveUser().getEmail() возвращает электронную почту владельца.
    • Session.getEffectiveUser().getEmail() возвращает электронную почту владельца.
  2. User1 установлен onOpen_sample() в качестве триггера OnOpen.
    • Session.getActiveUser().getEmail() не возвращает значения.
    • Session.getEffectiveUser().getEmail() возвращает адрес электронной почты пользователя 1.

Здесь

  1. Пользователь2 не устанавливает onOpen_sample() как триггер OnOpen.
    • Session.getActiveUser().getEmail() не возвращает значения.
    • Session.getEffectiveUser().getEmail() возвращает электронную почту пользователя user1.
      • Это не электронная почта владельца.

И, кроме того,

  1. User2 установлен onOpen_sample() в качестве триггера OnOpen.
    • Session.getActiveUser().getEmail() не возвращает значения.
    • Session.getEffectiveUser().getEmail() возвращает адрес электронной почты владельца.
      • Это не электронная почта пользователя 2.

А также, когда я установил триггер OnOpen несколькоИногда, даже если user1 и user2 устанавливают триггер, Session.getEffectiveUser().getEmail() возвращает только электронную почту владельца.

Таким образом, все пользователи могут запускать сценарий и открывать диалоговое окно.Я думал, что ваша проблема может быть в этом.Я думаю, что это может быть ошибкой.Поэтому я хотел бы сообщить об этом в систему отслеживания проблем.

Из этой ситуации на текущем этапе был найден следующий результат.

  1. Только владелец может запустить сценарий иоткройте диалоговое окно.
  2. Определенные пользователи не могут запустить сценарий и открыть диалоговое окно.

Я извиняюсь, что ваша проблема не была решена.Если бы я нашел обходной путь, я хотел бы сообщить здесь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...