Скрытие листов от определенных c пользователей внутри электронной таблицы - PullRequest
0 голосов
/ 27 мая 2020

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

Заранее большое спасибо.

function onOpen() {
      var Adminusr= ['amw22test.com','taaa@test.com','od22@test.com'];
      var Germanyusr = ['brs@test.com', 'ya32@test.com'];
      var Austriausr = ['dr32@test.com', 'ok42@test.com'];
      var Greeceusr = ['karw@test.com'];
      var Polandusr = ['shi0@test.com, Ma@test.com'];
      var Spainusr = ['sad2@test.com, ko12@test.com, tes4@test.com, kkwi@test.com']; 


        SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Germany').hideSheet()
        SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Austria').hideSheet()
        SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Greece').hideSheet()
        SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Poland').hideSheet()
        SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Spain').hideSheet()



      if (Adminusr.indexOf(Session.getEffectiveUser().getEmail()) >= 0 || Germanyusr.indexOf(Session.getEffectiveUser().getEmail()) >= 0) {
        SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Germany').showSheet()
      }

      if  (Adminusr.indexOf(Session.getEffectiveUser().getEmail()) >= 0 || Austriausr.indexOf(Session.getEffectiveUser().getEmail()) >= 0) {
        SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Austria').showSheet()
        }

      if (Adminusr.indexOf(Session.getEffectiveUser().getEmail()) >= 0 || Greeceusr.indexOf(Session.getEffectiveUser().getEmail()) >= 0) {
        SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Greece').showSheet()
      }

      if (Adminusr.indexOf(Session.getEffectiveUser().getEmail()) >= 0 || Polandusr.indexOf(Session.getEffectiveUser().getEmail()) >= 0) {
        SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Poland').showSheet()
      }

      if (Adminusr.indexOf(Session.getEffectiveUser().getEmail()) >= 0 || Spainusr.indexOf(Session.getEffectiveUser().getEmail()) >= 0) {
        SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Spain').showSheet()
      }


    }

1 Ответ

3 голосов
/ 27 мая 2020

У вашего проекта две основные проблемы

  1. Авторизация
  2. Алгоритм

Авторизация

У вас отсутствуют ограничения of onOpen и Class Session.

onOpen - зарезервированное имя для открытого простого триггера. Когда он запускается событием открытия, то не может выполнять методы, требующие авторизации.

Session.getEffectiveUser().getEmail() и Session.getActiveUser().getEmail() могут работать, когда владелец открывает электронную таблицу, но вернет пустую строку при открытии электронной таблицы редактором. Связанный вопрос: Session.getActiveUser (). GetEmail () не возвращает значения

Один трюк с использованием настраиваемого меню для сохранения адреса электронной почты активного пользователя в хранилище свойств пользователя, затем onOpen мог бы получить оттуда адрес электронной почты пользователя вместо использования Class Session. Связанный вопрос: Определить текущего пользователя в скрипте приложений

Алгоритм

onOpen будет выполняться каждый раз, когда владелец или редактор, любой редактор, независимо от того, откроет электронную таблицу если активен другой пользователь, поэтому, если brs@test.com откроет электронную таблицу, а через несколько секунд amw22test.com сделает то же самое, первый пользователь увидит все листы.

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


Другие связанные вопросы

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