0

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

  • Пользователь 1 (один менеджер местоположения) необходимо для просмотра и редактирования листа 1 (что начисление заработной платы для местоположения в)

  • Пользователь 2 (другой менеджер местоположения) должен просматривать и редактировать лист 2 (начисление заработной платы этого места), но НЕ Лист 1

  • Пользователь 3 (региональный менеджер) должен просматривать и редактировать как лист 1 и лист 2 , но не Sheets 3 & 4.

  • Пользователь 4 (региональный менеджер) должен иметь возможность просматривать и редактировать листы 1, 2, 3 и 4.

Google Sheets только обеспечивает защиту от редактирования, но мне интересно, если есть любое стороннее приложение, сценарий или обходной путь, который позволяет использовать эту функцию защиты от просмотра?

ответ

1

Короткий ответ = Нет. Если вы не можете найти этот метод с помощью API или скрипта, его сторонний сторонник не сможет предложить (они имеют доступ к тем же API-интерфейсам, которые мы делаем).

Немного более длинное решение. Вы можете создать одну главную таблицу, содержащую все эти данные, а затем еще 4 таблицы (по одному для каждого пользователя), которые извлекают данные с правильного листа (листов) в свою личную таблицу.

Для получения более длинного решения вы смотрите на таблицу 'onOpen' trigger в этой конкретной электронной таблице пользователей, поэтому, открывая электронную таблицу, она копирует правильные листы из электронной таблицы мастера в только что открытую электронную таблицу. Такие методы, как «openByID» (чтобы вы могли получить другую таблицу) и «copyTo» (чтобы скопировать другой лист электронных таблиц в текущую электронную таблицу), ваш друг здесь.

Очень, очень простой вариант, это может быть:

var ss = SpreadsheetApp.openById("ID-FOR-MASTER-SHEET"); 
var sheet = ss.getSheets() 
var destination = SpreadsheetApp.openById("ID-FOR-USERS-SHEET"); 
sheet[0].copyTo(destination); 

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

+0

Немного более длинное решение похоже, что это может быть хорошим обходным путем. У вас есть статья о том, как это сделать? В противном случае я могу работать над этим, мне просто интересно если есть что-то, что я могу использовать для упрощения процесса. –

+1

Я немного расширил свой ответ, чтобы надеяться дать вам общее представление о том, что я имею в виду, и о том, как его можно достичь. К сожалению, я не считаю, что есть шаг за шагом руководство, я просто думал, что это будет так, как я его реализую. Дайте мне знать, если что-то неясно. – HDCerberus

+0

Это замечательно! много для этого! Это даст мне хорошее начало, пытаясь справиться с этим. –

1

Idea

Разделить язычки на отдельные листы. Создайте папку и поместите в нее все документы. Поделитесь каждым листом только с владельцем, который в нем нуждается, а затем поделитесь папкой с региональным менеджером.

Бонус

Попробуйте импортировать команду.

Вы можете сделать: = IMPORTRANGE (A1, A2)

  • A1 = Лист URL
  • A2 = Tab Диапазон т.е. store1!A1: Q500

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

0

Прокомментируйте Отдельного архитектуры Workbook и ImportRange

Я хотел бы предостеречь против разделения приложения на отдельные рабочие книги. Использование параметра ImportRange() требует, чтобы вы установили разрешения на доступ к «Любой, у кого есть ссылка», а не более безопасный «Только конкретные пользователи».

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

Альтернатива: Content Service

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

Управление Просмотр

Предположительно можно запрограммировать книгу, чтобы скрыть листы зависимых от того, кто пользователь. Для этого требуется, чтобы они выполняли аутентификацию (например, вы не можете сделать это в onOpen(). Проблема заключается в том, когда вы одновременно просматриваете рабочую книгу соавторов. Было бы интересно посмотреть, как Sheets будет обрабатывать параллельные представления одного и того же документа. , Я готов поспорить, что это сработает.