简体   繁体   English

Google Sheet Script - 根据包含电子邮件的一系列单元格隐藏选项卡

[英]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();

Reference参考

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 如何使用 Google 表格中的 Google Apps 脚本从一个范围内创建多个选项卡? - How can multiple tabs be created from a range using Google Apps Script in a Google Sheet? Google Sheets Apps 脚本不隐藏标签 - Google Sheets Apps Script not hiding tabs 基于不同工作表中的值的单元格颜色范围 - Color range of cells based on values in different sheet 将谷歌表格中的一系列单元格作为 PDF 下载到本地计算机和其他自动化脚本的脚本? - Script to download a range of cells in google sheet as PDF to local computer and other automation scripts? Google Spreadsheets 脚本 - 如何将范围从一张纸复制到另一张纸,但不覆盖非空目标单元格 - Google Spreadsheets script - How to copy range from one sheet to another sheet, but without overwriting non-empty target cells Google Spreadsheet Script RegEx on Cells of Cells - Google Spreadsheet Script RegEx on Range of Cells 如果值低于60%,尝试制作一个脚本来扫描Google表格和电子邮件 - Trying to make a script that scans a Google Sheet and emails if values are below 60% 使用Google脚本从Google表格中的单元格列表获取数组 - Using Google Script to get an array from a list of cells in google sheet Google脚本-根据另一个工作表上的复选框隐藏/取消隐藏Google工作表 - Google script - Hide/Unhide google sheet based on checkbox on another sheet 使用谷歌工作表脚本编辑器将数据提交到不同的标签 - Submitting data to different tabs using google sheet script editor
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM