[英]Google Sheet Script - Hiding tabs based on a range of cells containing emails
So, what I'm trying to do is hide certain tabs for certain users for privacy reasons.所以,我想做的是出于隐私原因为某些用户隐藏某些选项卡。
I have one tab that contains 8 columns and 51 rows.我有一个包含 8 列和 51 行的选项卡。 (One column for each group of users, one row for titles, and 50 slots for each group)
(每组用户一列,标题一行,每组50个slot)
What I'm trying to do is take this sheet, separate out each group, then depending on which group the current (active) user is in, hide certain sheets and show others.我想做的是拿这张表,把每个组分开,然后根据当前(活动)用户所在的组,隐藏某些表并显示其他表。
I have 2 functions, one function to update the groups (validUsers), and a second to update which tabs are hidden (updateHiddenSheets).我有 2 个函数,一个 function 用于更新组 (validUsers),第二个用于更新隐藏的选项卡 (updateHiddenSheets)。
validUsers() currently has 1/1 successful trigger. validUsers() 当前有 1/1 成功触发。 (onEdit) updateHiddenSheets() currently has 0/2 successful triggers.
(onEdit) updateHiddenSheets() 当前有 0/2 个成功的触发器。 (onOpen)
(打开时)
Is there a better way to do this?有一个更好的方法吗?
Edit: I've been trying a few different things, and now I'm running into an error from validUsers().编辑:我一直在尝试一些不同的事情,现在我遇到了 validUsers() 的错误。
TypeError: Cannot read property '0' of undefined
Line 18
(that is the one line inside the first for loop) (这是第一个 for 循环中的一行)
Code:代码:
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();
}
}
The reason you are getting this error is because you are trying to access the 0
property of an undefined piece of data in your emailList
array.您收到此错误的原因是因为您试图访问
emailList
数组中未定义数据的0
属性。
Also, if you look closely at your emailList
array, it is an array of ranges.此外,如果您仔细查看您的
emailList
数组,它是一个范围数组。 In order to get the actual values from these ranges, you have to add getValues()
:为了从这些范围中获取实际值,您必须添加
getValues()
:
var emailsList = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Emails').getRange(2,1,numEmails,8).getValues();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.