#javascript #google-apps-script #google-sheets #tabs
#javascript #google-apps-script #google-sheets #вкладки
Вопрос:
Итак, что я пытаюсь сделать, это скрыть определенные вкладки для определенных пользователей по соображениям конфиденциальности.
У меня есть одна вкладка, которая содержит 8 столбцов и 51 строку. (Один столбец для каждой группы пользователей, одна строка для заголовков и 50 слотов для каждой группы)
То, что я пытаюсь сделать, это взять этот лист, выделить каждую группу, затем, в зависимости от того, в какой группе находится текущий (активный) пользователь, скрыть определенные листы и показать другие.
У меня есть 2 функции: одна функция для обновления групп (validUsers), а вторая для обновления скрытых вкладок (updateHiddenSheets).
У validUsers() в настоящее время успешно срабатывает 1/1. (onEdit) updateHiddenSheets() в настоящее время имеет 0/2 успешных триггеров. (onOpen)
Есть ли лучший способ сделать это?
Редактировать: я пробовал несколько разных вещей, и теперь я столкнулся с ошибкой validUsers ().
TypeError: Cannot read property '0' of undefined
Line 18
(это одна строка внутри первого цикла for)
Код:
var numEmails = 50;//This is the number of emails in a given column
var emailsList = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Emails').getRange(2,1,numEmails,8);
var stakePeople = [numEmails];
var crystalHeights1 = [numEmails];
var crystalHeights2 = [numEmails];
var stratfordEast = [numEmails];
var stratford = [numEmails];
var highlandPark = [numEmails];
var imperial1 = [numEmails];
var imperial2 = [numEmails];
for(i=1; i<=numEmails;i ) {
crystalHeights1 [i] = emailsList[i][0];
}
for(i=1; i<=numEmails;i ) {
crystalHeights2 [i] = emailsList[i][1];
}
for(i=1; i<=numEmails;i ) {
stratfordEast [i] = emailsList[i][2];
}
for(i=1; i<=numEmails;i ) {
stratford [i] = emailsList[i][3];
}
for(i=1; i<=numEmails;i ) {
highlandPark[i] = emailsList[i][4];
}
for(i=1; i<=numEmails;i ) {
imperial1 [i] = emailsList[i][5];
}
for(i=1; i<=numEmails;i ) {
imperial2 [i] = emailsList[i][6];
}
for(i=1; i<=numEmails;i ) {
stakePeople [i] = emailsList[i][7];
}
}
var currentUserEmail = Session.getActiveUser().getEmail()
if (crystalHeights1.includes(currentUserEmail)) {
SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Crystal Heights 1st Ward').showSheet();
SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Crystal Heights 2nd Ward').hideSheet();
SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Stratford East Ward').hideSheet();
SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Stratford Ward').hideSheet();
SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Highland Park Ward').hideSheet();
SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Imperial 1st Ward').hideSheet();
SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Imperial 2nd Ward').hideSheet();
SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Troubleshooting').hideSheet();
SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Emails').hideSheet();
}
else if (crystalHeights2.includes(currentUserEmail)) {
SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Crystal Heights 1st Ward').hideSheet();
SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Crystal Heights 2nd Ward').showSheet();
SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Stratford East Ward').hideSheet();
SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Stratford Ward').hideSheet();
SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Highland Park Ward').hideSheet();
SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Imperial 1st Ward').hideSheet();
SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Imperial 2nd Ward').hideSheet();
SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Troubleshooting').hideSheet();
SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Emails').hideSheet();
}
else if (stratfordEast.includes(currentUserEmail)) {
SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Crystal Heights 1st Ward').hideSheet();
SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Crystal Heights 2nd Ward').hideSheet();
SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Stratford East Ward').showSheet();
SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Stratford Ward').hideSheet();
SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Highland Park Ward').hideSheet();
SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Imperial 1st Ward').hideSheet();
SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Imperial 2nd Ward').hideSheet();
SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Troubleshooting').hideSheet();
SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Emails').hideSheet();
}
else if (stratford.includes(currentUserEmail)) {
SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Crystal Heights 1st Ward').hideSheet();
SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Crystal Heights 2nd Ward').hideSheet();
SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Stratford East Ward').hideSheet();
SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Stratford Ward').showSheet();
SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Highland Park Ward').hideSheet();
SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Imperial 1st Ward').hideSheet();
SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Imperial 2nd Ward').hideSheet();
SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Troubleshooting').hideSheet();
SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Emails').hideSheet();
}
else if (highlandPark.includes(currentUserEmail)) {
SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Crystal Heights 1st Ward').hideSheet();
SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Crystal Heights 2nd Ward').hideSheet();
SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Stratford East Ward').hideSheet();
SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Stratford Ward').hideSheet();
SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Highland Park Ward').showSheet();
SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Imperial 1st Ward').hideSheet();
SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Imperial 2nd Ward').hideSheet();
SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Troubleshooting').hideSheet();
SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Emails').hideSheet();
}
else if (imperial1.includes(currentUserEmail)) {
SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Crystal Heights 1st Ward').hideSheet();
SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Crystal Heights 2nd Ward').hideSheet();
SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Stratford East Ward').hideSheet();
SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Stratford Ward').hideSheet();
SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Highland Park Ward').hideSheet();
SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Imperial 1st Ward').showSheet();
SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Imperial 2nd Ward').hideSheet();
SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Troubleshooting').hideSheet();
SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Emails').hideSheet();
}
else if (imperial2.includes(currentUserEmail)) {
SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Crystal Heights 1st Ward').hideSheet();
SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Crystal Heights 2nd Ward').hideSheet();
SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Stratford East Ward').hideSheet();
SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Stratford Ward').hideSheet();
SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Highland Park Ward').hideSheet();
SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Imperial 1st Ward').hideSheet();
SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Imperial 2nd Ward').showSheet();
SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Troubleshooting').hideSheet();
SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Emails').hideSheet();
}
else if (stakePeople.includes(currentUserEmail)) {
SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Crystal Heights 1st Ward').showSheet();
SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Crystal Heights 2nd Ward').showSheet();
SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Stratford East Ward').showSheet();
SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Stratford Ward').showSheet();
SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Highland Park Ward').showSheet();
SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Imperial 1st Ward').showSheet();
SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Imperial 2nd Ward').showSheet();
SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Troubleshooting').showSheet();
SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Emails').showSheet();
}
}
Комментарии:
1. Есть ли у пользователя доступ к редактированию?
2. Сколько строк в столбце 1 таблицы электронных писем.
Ответ №1:
Причина, по которой вы получаете эту ошибку, заключается в том, что вы пытаетесь получить доступ к 0
свойству неопределенной части данных в вашем emailList
массиве.
Кроме того, если вы внимательно посмотрите на свой emailList
массив, это массив диапазонов. Чтобы получить фактические значения из этих диапазонов, вы должны добавить getValues()
:
var emailsList = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Emails').getRange(2,1,numEmails,8).getValues();